加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:49:29 所属栏目:安全 来源:网络整理
导读:我在unix中要求用空格替换单词的出现. 我的文件看起来像下面.我需要更换| NA |有空间 文件格式 1234|NA|NA|abcd|xyz2345|NA|NA|NA|lmn456|NA|abcd|xya|ggh 预期产出 1234| | |abcd|xyz2345| | | |lmn456| |abcd|xya|ggh 我使用以下命令,但它只替换第一次出现
我在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 |.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读