unix - 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”之后某处有“保存”的行。
任何帮助将不胜感激。
问候, 拉胡尔
解决方案
你为什么要使用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
,每个文件将只被读取一次。
推荐阅读
- parsing - Parsec 自定义 while 循环解析器只解析循环体中的一条语句
- python - 烧瓶 | 如何将丢失的(404)资产文件夹连接到从引导工作室导出的 html
- java - Eclipse(Rational Application Developer)在 windows > 首选项中缺少 Ant 选项
- r - 是否有基于 R 的解决方案来根据数据文件及其通用名称属性创建 Windows 10 文件夹?
- react-native - 找不到模块:无法解析“C:\Users\HP\Desktop\PressApp\WinPressing”中的“./screens”
- python - 类似字节的对象上的字符串模式
- reactjs - url 中的子目录通过自定义 webpack 设置中断反应路由
- python - 条件和的更快和python原生实现(矢量化)
- sql - 在 SQL Server 2008 中将多个 SQL 行连接成单个列
- javascript - 在 reader.onload 完成执行后调用方法