【问题标题】:Sed Command substitution how do you treat spaces or multiple spaces as one?sed 命令替换如何将空格或多个空格视为一个?
【发布时间】:2014-06-11 12:50:52
【问题描述】:

我使用这个命令来插入一行。如果文本或文件中的两个条目之间的模式中有空格,它将在新行上打印内容。它工作正常,但有时我遇到 2 个空格或 3 个空格,而不是我在模式中寻找的一个,所以我得到了额外的空白行。

sed "s/ /\n/g"

我想打印一个新行,只有 sed 在模式中找到了一些东西。 我应该如何使用 sed 命令将 1 个空格或两个或三个空格视为一个替代项?

【问题讨论】:

  • 我知道这是一个 sed 问题。但是可以通过tr -s ' ' '\n'来实现
  • 还有awk '$1=$1' OFS='\n'
  • @shiplu.mokadd.im 在其中一个答案中指定选项后,在 cmets 中添加一个选项没有什么意义。

标签: linux bash sed


【解决方案1】:

你需要一个量词:

sed "s/  */\n/g"

sed 's/ \+/\n/g'       # With GNU sed

sed -r 's/ +/\n/g'

sed 's/ \{1,\}/\n/g'

sed -r 's/ {1,}/\n/g'

如果使用 BSD sed,

sed 's/  */\'$'\n''/g'

sed -r 's/ +/\'$'\n''/g'

你也可以使用tr:

tr -s ' ' '\n'

-s 选项挤压 set1 中的一个字符重复,即本例中的' '

【讨论】:

  • 第二个不便携。
  • @shiplu.mokadd.im 感谢添加注释。也为 BSD sed 添加了选项。
【解决方案2】:

我会做类似...

sed -e 's/\s\+/\n/g' [filename]

查找并用新行替换一个或多个空格。

【讨论】:

    猜你喜欢
    • 2014-05-21
    • 2010-11-19
    • 1970-01-01
    • 2014-01-25
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 2018-02-09
    • 2014-06-22
    相关资源
    最近更新 更多