【发布时间】:2020-01-19 19:52:16
【问题描述】:
我想使用 SED 在多个文件中查找和替换一小段文本。
具体我要执行的替换是:
sed -e '/35=R/s/|131=.*|/|131=$UNIQUE|/g' $f
在 $f 是文件名的 bash 脚本中运行。
sed 搜索包含字符串 35=R 的行,然后有一个非常简单的表达式来替换 |131=.*|(|131=) 之后的任何内容都使用 |131=$UNIQUE|。
这似乎在某些文件上完美运行,但在其他情况下:
例如工作示例:
之前:
8=FIX.4.2|9=151|35=R|56=ABC|142=7848|50=STUFF|49=OTHERSTUFF|52=20250905-06:00:10.910|34=107|146=1|55=DE123|22=4|48=DE123|38=1|54=1|207=F|131=12ABC|10=243
之后:
8=FIX.4.2|9=151|35=R|56=COBA|142=7848|50=STUFF|49=OTHERSTUFF|52=20250905-06:00:10.910|34=107|146=1|55=DE123|22=4|48=DE123|38=1|54=1|207=F|131=$UNIQUE|10=243
但在其他情况下,它似乎会输出大量文本缺失。
示例不起作用:
之前:
8=FIX.4.2|9=147|35=R|34=15301|49=STUFF|52=20190905-15:27:54.305|56=OTHERSTUFF|115=STUFFY|131=1234abc|146=1|55=AB123|15=ZYX|22=4|38=1|48=AB123|54=2|207=STUFF|10=253
之后:
8=FIX.4.2|9=147|35=R|34=15301|49=STUFF|52=20190905-15:27:54.305|56=OTHERSTUFF|115=STUFFY|131=$UNIQUE|10=253
正如您所见,它在 131=$UNIQUE 之后丢失了管道后面的所有内容。我对表达式和 sed 相当陌生,所以我可能误解了替换部分。任何指针将不胜感激。
谢谢。
【问题讨论】:
标签: regex sed non-greedy