我想将 "abc ö-Ö ä-Ä å-Å def"
字符串的 ä 更改为 ae,å 更改为 aa,ö 更改为 oe。
sed -i 's/ä/ae/g' aFile | sed -i 's/å/aa/g' aFile | sed -i 's/ö/oe/g' aFile
此命令有时仅更改 ö 和 ä,有时仅更改 ä。奇怪的是,该命令有时以另一种方式工作。它有什么问题?
提前致谢
最佳答案
-i
(就地编辑)和管道不混合。以下两个命令中的任何一个都可以工作:
sed -i -e 's/ä/ae/g' -e 's/å/aa/g' -e 's/ö/oe/g' aFile
sed -i 's/ä/ae/g' aFile; sed -i 's/å/aa/g' 文件; sed -i 's/ö/oe/g' aFile
基本上,问题中给出的代码中发生的事情是三个 sed
都是并行启动的,它们都想修改同一个文件。这会导致不确定的行为,因为您不可能知道三个 sed
中的哪一个从文件中读取了什么。
其次,如果使用 -i
(就地编辑)调用 sed
,它不会读取标准输入,也不会写入标准输出。
啊,顺便说一句,这只处理小写字母 [äåö]
。
关于regex - 为什么 sed regexp 会部分且不一致地更改文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47190344/