我有一个包含许多行的文件(行定界符为〜)。每行,我有很多元素,用定界符“*”分隔。
我想做的是,
我的文件中会有一行以字符串TRN开头的行。它可以有4个(包括TRN)或更多数据点。就像是,
TRN*1*S521000035*1020494919~
TRN*1*S521000035*1020494919*787989800~
我想将这行的第四个数据点替换为abc123。 IE,
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~