我在Unix中有一个要求,要用空格替换单词的出现。我的文件如下所示。我需要替换| NA | 与空间
文件格式
1234|NA|NA|abcd|xyz
2345|NA|NA|NA|lmn
456|NA|abcd|xya|ggh
Run Code Online (Sandbox Code Playgroud)
预期产量
1234| | |abcd|xyz
2345| | | |lmn
456| |abcd|xya|ggh
Run Code Online (Sandbox Code Playgroud)
我正在使用以下命令,但它仅替换第一次出现的命令
sed 's/|NA|| |/g'
Run Code Online (Sandbox Code Playgroud)
尽管g修饰符确实进行了“全局”替换,但这些替换必须不重叠。当需要重叠的替换时,必须循环:
$ sed ':a; s/|NA|/| |/g; ta' file.txt
1234| | |abcd|xyz
2345| | | |lmn
456| |abcd|xya|ggh
Run Code Online (Sandbox Code Playgroud)
以上已在GNU sed上进行了测试。对于BSD(OSX)sed(提示:Jonathan Leffler),标签a必须仅出现在命令字符串的末尾:
sed -e ':a' -e ' s/|NA|/| |/g; ta' file.txt
Run Code Online (Sandbox Code Playgroud)
:a创建一个标签a。
s/|NA|/| |/g执行所需的替换,但仅对的非重叠实例执行|NA|。
ta告诉sed a如果前面的替换命令导致该行发生任何更改,则跳至label 。以此方式,替换命令会根据需要重复多次,以替换每次出现的|NA|。
| 归档时间: |
|
| 查看次数: |
2322 次 |
| 最近记录: |