我知道以下命令可用于将特定字符串的所有实例递归替换为另一个:

find/path/to/files -type f -print0 | xargs -0 sed -i 's/oldstring/newstring/g'

但是,我只需要对以特定字符串(“matchstr”)开头的行执行此操作。

例如,如果一个文件包含以下几行:

This line containing oldstring should remain untouched
matchstr sometext oldstring somethingelse

我想把它作为输出:
This line containing oldstring should remain untouched
matchstr sometext newstring somethingelse

任何关于我如何进行的建议将不胜感激。

最佳答案

你可以这样做:

sed -i '/^matchstr/{s/oldstring/newstring/g}'

IE
find /path/to/files -type f -print0 | \
  xargs -0 sed -i '/^matchstr/{s/oldstring/newstring/g}'

第一个 /^matchstr/ 查找与该正则表达式匹配的行,并为这些行执行 s/old/new/g

关于regex - 查找/sed : How can I recursively search/replace a string in files but only for lines that match a particular regexp,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9577204/

10-12 14:15