bash - sed/awk 命令在保留空格的同时替换模式
问题描述
我的目录中有多个文件,其中一行带有这样的模式:
.declare trading_name__w a22
.declare trading_name__w a22
.declare trading_name__w a22
我想用 替换单词,保持单词之间的a22
间距a40
一致(因为它们在原始文件中)。
我试过这个命令:
sed 's/trading_name__w\([^%]\+\)a22/trading_name__w\([^%]\+\)a40/g' filename
但它扰乱了单词之间的间距:
.declare trading_name__w([^%]+)a40
如何使用 sed 或 awk 做到这一点?
解决方案
您必须\1
在替换字符串中使用来复制捕获组。
sed 's/trading_name__w\([^%]\+\)a22/trading_name__w\1a40/g' filename
推荐阅读
- javascript - 比 document.createElement 性能更好
- mysql - 如何在具有多个连接和条件的查询中从单个表中删除记录?
- c++ - 从另一个对象启动方法的对象的方法
- java - android.view.InflateException 二进制 XML 文件第 0 行:膨胀类错误
引起:java.lang.reflect.InvocationTargetException - java - 尝试以编程方式重用具有细微差异的布局
- ruby-on-rails - 当管理员按下提交时如何将表值设置为 true
- php - 将 Json 输出转换为 UTF8
- git - 如何在推送中获取最新的提交消息并验证消息以某种正则表达式模式开头?
- mysql - 用户能否编写复杂的查询,只能访问视图?
- python - 索引错误:Python