我有一个项目目录,其中的文件夹包含.html文件。我想找到具有模式的文件-
'btn-primary.*{.*Save'
然后替换
'btn-primary' word with 'btn-primary Save'
仅在这些行中。
我做了什么:
grep -rl -e 'btn-primary.*{Save' . |xargs sed -i 's/btn-primary/btn-primary Save/g'
这是怎么做的:
这找到了所有具有该模式的文件,没关系。然后,sed在所有这些文件上运行,并在任何地方将“ btn-primary”替换为“ btn-primary save”,这不是我想要的
我想要的是:在“ btn-primary”之后某处存在“ Save”的行上替换。
任何帮助将不胜感激。
关于, 拉胡尔
答案 0 :(得分:3)
为什么要使用grep? Sed进行模式匹配:
sed -e 's/btn-primary\(.*{.*Save\)/btn-primary Save\1/g'
或:
sed -e 's/\(btn-primary\)\(.*{.*Save\)/\1 Save\2/g'
如果您正在使用grep
来减少sed
将要运行的文件的数量,那么如果您认为这样做更有效,就在自欺欺人。这样,您将读取每个不匹配的文件,但是每个不匹配的文件将被读取两次。如果您仅使用sed
,则每个文件只能读取一次。