正则表达式 – 如何用sed替换一行的一部分?

前端之家收集整理的这篇文章主要介绍了正则表达式 – 如何用sed替换一行的一部分?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个包含许多行的文件(行分隔符是〜).每一行,我有许多元素,由分隔符’*’分隔.
我想做的是,
 我将在我的文件中有一个以字符串TRN开头的行.它可以包含4个(包括TRN)或更多数据点.就像是,

TRN*1*S521000035*1020494919~
TRN*1*S521000035*1020494919*787989800~

我想将这行中的第四个数据点替换为abc123.即

TRN*1*S521000035*abc123~
TRN*1*S521000035*abc123*787989800~

我尝试使用正则表达式的sed命令

sed -i 's/^TRN\*(.*)\*(.*)\*(.*)$/abc123/g' file.txt

但整个字符串都被替换为abc123.

是否可以使用sed命令仅更改其第4个数据点?

解决方法

使用GNU sed:

$sed -r -i 's/^((\w+\*){3})\w*(.*)/\1abc123\3/g' file.txt

输出

TRN*1*S521000035*abc123~
TRN*1*S521000035*abc123*787989800~

猜你在找的正则表达式相关文章