我知道以下命令可用于将特定字符串的所有实例递归替换为另一个:
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/