Unix Grep找到一个模式并在同一行中替换

Unix Grep找到一个模式并在同一行中替换,unix,sed,grep,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在所有这些文件上运行,

我有一个包含.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 save”替换“btn primary”,这不是我想要的

我想要的是:替换那些在“btn主”之后某处有“Save”的行

任何帮助都将不胜感激

问候,,
Rahul

你为什么要使用grep?Sed进行模式匹配:

sed -e 's/btn-primary\(.*{.*Save\)/btn-primary Save\1/g'
或:


如果您使用
grep
试图减少
sed
将要操作的文件数量,那么如果您认为这样更有效,那就是在愚弄自己。通过这样做,您将只读取一次不匹配的每个文件,但读取两次匹配的每个文件。如果您只使用
sed
,则每个文件将只读取一次。

为什么要使用grep?Sed进行模式匹配:

sed -e 's/btn-primary\(.*{.*Save\)/btn-primary Save\1/g'
或:

如果您使用
grep
试图减少
sed
将要操作的文件数量,那么如果您认为这样更有效,那就是在愚弄自己。通过这样做,您将只读取一次不匹配的每个文件,但读取两次匹配的每个文件。如果只使用
sed
,则每个文件将只读取一次