【问题标题】:Replace the first occurrence of MORE than one space with newline用换行符替换第一次出现的多于一个空格
【发布时间】:2015-05-30 23:43:03
【问题描述】:

我正在尝试用换行符替换具有多个空格的第一个位置。

例如:

123 yes      foo bar       #

会变成:

123 yes
foo bar       #

我试过了

sed 's/^\s+/\n/' old > new

没有运气。我也对 linux 中允许我执行此操作的任何其他程序持开放态度,例如 awk、perl 或 bash。

【问题讨论】:

  • 你知道,我回答了你最后一个问题。
  • @Wintermute 这是第一次出现多个空格

标签: regex file awk sed


【解决方案1】:

您正在尝试将行首与^ 匹配。去掉它。您需要转义 + 字符。试试这个:

 sed 's/\s\s\+/\n/' old > new
 sed -r 's/\s\s+/\n/' old > new   # less escaping with extended regex syntax

您也可以使用\{min,max\} 来定义更具体的重复。

 sed 's/\s\{2,\}/\n/' old > new
 sed -r 's/\s{2,}/\n/' old > new  # less escaping with extended regex syntax

【讨论】:

  • 不幸的是,这会在第一次出现空格而不是第一次出现多个空格时创建一个换行符。
【解决方案2】:

您可以为此使用awk

awk '{sub(/  +/,RS)}1' file
123 yes
foo bar       #

或者这个:

awk '{sub(/\s\s+/,RS)}1'

或者这个:

awk '{sub(/[[:space:]][[:space:]]+/,RS)}1'

【讨论】:

    猜你喜欢
    • 2015-05-30
    • 2020-12-08
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    相关资源
    最近更新 更多