gpt4 book ai didi

unix - 在 unix 中使用 sed 替换多次出现的单词

转载 作者:行者123 更新时间:2023-12-01 08:11:11 24 4
gpt4 key购买 nike

我在 unix 中有一个要求,用空格替换出现的单词。
我的文件如下所示。我需要更换 |NA|有空间

文件格式

1234|NA|NA|abcd|xyz
2345|NA|NA|NA|lmn
456|NA|abcd|xya|ggh

预期产出
1234| | |abcd|xyz
2345| | | |lmn
456| |abcd|xya|ggh

我正在使用以下命令,但它只替换第一次出现
sed 's/|NA|| |/g'

最佳答案

虽然 g 修饰符确实进行“全局”替换,但替换必须不重叠。当需要重叠替换时,必须循环:

$ sed ':a; s/|NA|/| |/g; ta' file.txt
1234| | |abcd|xyz
2345| | | |lmn
456| |abcd|xya|ggh

以上是在 GNU sed 上测试的。对于 BSD (OSX) sed(帽子提示:Jonathan Leffler),标签 a 必须仅出现在命令字符串的末尾:
sed -e ':a' -e ' s/|NA|/| |/g; ta' file.txt

这个怎么运作
  • :a 创建一个标签 a
  • s/|NA|/| |/g 执行您想要的替换,但仅适用于 |NA| 的非重叠实例。
  • ta 告诉 sed 跳转到标签 a 如果前面的替换命令导致该行发生任何更改。这样,替换命令会根据需要重复多次,以替换每次出现的 |NA|
  • 关于unix - 在 unix 中使用 sed 替换多次出现的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37800372/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com