用换行符替换第一个出现的多个空格

时间:2015-03-26 19:29:22

标签: regex file awk sed

我正在尝试用换行替换具有多个空格的第一个地方。

例如:

123 yes      foo bar       #

会变成:

123 yes
foo bar       #

我试过了

sed 's/^\s+/\n/' old > new
没有运气。我也对linux中允许我这样做的其他程序开放,比如awk,perl或bash。

2 个答案:

答案 0 :(得分:3)

您尝试将行的开头与^匹配。去掉它。你需要逃避+角色。试试这个:

 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

答案 1 :(得分:0)

您可以使用awk

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

或者这个:

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

或者这个:

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