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

shell – sed:同时替换,以及更改行的打印输出?

发布时间:2020-12-16 01:35:07 所属栏目:安全 来源:网络整理
导读:说我有这个文件: cat test.txt EOFline one wordline two wordline three wordline one two wordEOF 让我们说我想用’TWO’替换所有单词’two’,在test.txt文件中就地内联. 现在,我所做的,通常是构建一个“预览”(-n不打印行,然后使用/ p – 仅打印匹配的行
说我有这个文件:
cat > test.txt <<EOF
line one word
line two word
line three word
line one two word
EOF

让我们说我想用’TWO’替换所有单词’two’,在test.txt文件中就地内联.

现在,我所做的,通常是构建一个“预览”(-n不打印行,然后使用/ p – 仅打印匹配的行):

$sed -n 's/two/TWO/gp' test.txt 
line TWO word
line one TWO word

…然后我通常执行实际的就地替换(使用-i,而不使用/ p):

$sed -i 's/two/TWO/g' test.txt
$cat test.txt 
line one word
line TWO word
line three word
line one TWO word

有没有办法让sed在文件中就地更改行,并从单个命令行将更改的行打印到stdout?

在Linux上,您可以逃脱:
sed -i '/two/{s/two/TWO/g; w /dev/stdout}' test.txt

在BSD系统(包括Mac OS X)上,sed有关于何时可以将动作组合到一行上的略微古怪的规则,我不得不使用:

sed -i '/two/{s/two/TWO/g; w /dev/stdout
       }' test.txt

(编辑:李大同)

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

    推荐文章
      热点阅读