首页 > 解决方案 > 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”之后某处有“保存”的行。

任何帮助将不胜感激。

问候, 拉胡尔

标签: unixsedgrep

解决方案


你为什么要使用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,每个文件将只被读取一次。


推荐阅读