假设我有一个这样的文件:
hello
bye
bye
asd
hello
我希望可以交换 你好 和 再见 (这只是一个例子,请不要局限于这些词语)。
我已经尝试了以下方法:
sed -e 's/hello/bye/I g;s/bye/hello/I g' input.txt > output.txt
但是你可以想象,这只改变了“bye”成“hello”,而“hello”仍然没有改变。
假设我有一个这样的文件:
hello
bye
bye
asd
hello
我希望可以交换 你好 和 再见 (这只是一个例子,请不要局限于这些词语)。
我已经尝试了以下方法:
sed -e 's/hello/bye/I g;s/bye/hello/I g' input.txt > output.txt
但是你可以想象,这只改变了“bye”成“hello”,而“hello”仍然没有改变。
使用GNU sed:
sed '/^hello$/{ s/.*/bye/;b }; /^bye$/{ s/.*/hello/ }' file
b label
:跳转到标签;如果省略标签,则跳转到脚本结尾。
输出:
bye hello hello asd bye
sed -z 's/\<hello\>/\x00/ig;s/\<bye\>/hello/ig;s/\x00/bye/g' file
使用-z
选项将文件读入内存。
将每个hello
替换为零字节。
将每个bye
替换为hello
。
将每个零字节替换为bye
。
注意:使用-z
选项,模式空间中接受的字符串由零字节分隔。