regex - 为什么 sed regexp 会部分且不一致地更改文本

标签 regex linux ubuntu sed

我想将 "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/

相关文章:

php - 无法在 Plesk 上运行 pdflatex 命令 (Tex Live)

ruby-on-rails - 套接字错误 : Failed to open TCP connection to rubygmes. 组织:443

r - 如何从字符串中提取特定单词后的内容

python - 为什么我的正则表达式找不到名称?

python - Django URL 正则表达式接受任何数字或直到 99 的任何数字

linux - Ubuntu 12.0.04 中的单节点 Hadoop 设置

node.js - 安装 sharp 时出现问题

MySql 列匹配 3 个连续数字

linux - 在集群队列中执行 Fortran 时出现问题

vb.net - 我可以在 Ubuntu 上为 Visual C++ 和 Visual Basic 编写代码吗?