如何使用 sed 替换除最后一个符号之外的所有符号?

Luc*_*Lau 4 sed

例如,我有这样一行:

44567743346_567864_56788_5677_3
Run Code Online (Sandbox Code Playgroud)

我想把所有的都_改成:,除了最后一个会改成\。预期的输出是:

44567743346:567864:56788:5677\3
Run Code Online (Sandbox Code Playgroud)

Joh*_*024 6

$ 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)