Grep查找模式并在同一行中替换

时间:2018-10-30 15:30:38

标签: unix sed grep

我有一个项目目录,其中的文件夹包含.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”的行上替换。

任何帮助将不胜感激。

关于, 拉胡尔

1 个答案:

答案 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,则每个文件只能读取一次。