【问题标题】:-n parameter in sed prevents substitution [duplicate]sed中的-n参数防止替换[重复]
【发布时间】:2018-06-26 17:40:15
【问题描述】:

假设我们想用 sed 将 text.txt 文件中的摩尔斯电码等价的字母“a”替换为隐藏的 .out.txt 文件,原始文件的内容为“这是一个测试” .

#!/bin/bash
touch .out.txt
cat text.txt > .out.txt
sed 's/a/.-/g' .out.txt

正如预期的那样,输出是“这是 .- 测试”。
但是,假设我们想要执行多个 sed 实例,而不是使用 -n 参数不断打印每个 sed 实例的结果。在这种情况下:

#!/bin/bash
touch .out.txt
cat text.txt > .out.txt
sed -n 's/a/.-/g' .out.txt
sed -n 's/t/-/g' .out.txt
cat .out.txt

但是,在这种情况下,cat 的输出与 text.txt 的内容相同,“这是一个测试”。
是否有可能替代-n,或者一般来说有一种方法可以防止 sed 打印任何符合我们想要的结果的内容?

【问题讨论】:

  • sed -n 's/t/-/g' .out.txt 并没有真正改变 out.txt
  • 强调@anubhava 所说的内容:sed 默认情况下不会修改命令行中引用的文件。它只是将修改后的输出发送到 stdout没有您所做的任何事情都不会更改您的 .out.txt 文件。
  • 另外,-n 禁止自动输出。然后,您必须告诉 sed 要输出什么(在表达式末尾使用 p)。 sed -in 's/a/.-/pg' .out.txt... 注意:这不会打印不匹配的行。
  • 有什么理由不选择sed -e 's/a/.-/g' -e 's/t/-/g' test.txt > .out.txt 吗?

标签: bash unix sed


【解决方案1】:

检查您的 seds sed --help 以获取 -ioption 的语法。
这是必要的,因为语法会根据您使用的 sed 不同而有所不同,也就是说,我不能简单地告诉您。
然后相应地使用它来使 sed 的效果发生在文件上in-place。

【讨论】:

    猜你喜欢
    • 2023-02-03
    • 2021-10-21
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 2016-01-23
    • 2012-11-04
    相关资源
    最近更新 更多