例如,我有这样一行:
44567743346_567864_56788_5677_3
Run Code Online (Sandbox Code Playgroud)
我想把所有的都_
改成:
,除了最后一个会改成\
。预期的输出是:
44567743346:567864:56788:5677\3
Run Code Online (Sandbox Code Playgroud)
$ echo '44567743346_567864_56788_5677_3' | sed -r 's|_|:|g; s|:([^:]*)$|\\\1|'
44567743346:567864:56788:5677\3
Run Code Online (Sandbox Code Playgroud)
这使用了两个 sed 替换命令。首先,s|_|:|g
将所有下划线更改为冒号。第二,s|:([^:]*)$|\\\1|
找到最后一个冒号并将其更改为反斜杠。
sed -r '1~4{s|_|:|g; s|:([^:]*)$|\\\1|;}' file
Run Code Online (Sandbox Code Playgroud)
要就地修改文件:
sed -i -r '1~4{s|_|:|g; s|:([^:]*)$|\\\1|;}' file
Run Code Online (Sandbox Code Playgroud)