我试图用[6位数]后面的空格替换我尝试过的换行符
sed 's/a\d{6}\s\+/\n/' old > new
例如:
a123456 this is a sentence
会变成:
a123456
this is a sentence
我也对linux中允许我这样做的其他程序开放,例如awk,perl或bash。
答案 0 :(得分:1)
首先,我建议在这里使用带有sed -r
的POSIX扩展正则表达式来简化模式。
POSIX正则表达式甚至POSIX扩展正则表达式(-r
)不支持\d
或\s
作为字符类,例如Perl。我会使用以下模式:
sed -r 's/(a[0-9]{6}) +/\1\n/' old > new
请注意,我正在将空间之前的所有内容捕获到捕获组中,并在替换模式中使用此组\1
。
但是,确实在POSIX正则表达式中可以使用命名的字符类,但它们的输入时间比在Perl中更长。如果要使用命名字符类,可以使用:
sed -r 's/(a[[:digit:]]{6})[[:space:]]+/\1\n/' old > new
在这种情况下。如果您想了解有关POSIX正则表达式中可用字符类的更多信息,请查看grep
和/或egrep
的联机帮助页。
答案 1 :(得分:1)
您可以使用:
s='a123456 this is a sentence'
sed -r $'s/\<(a[[:digit:]]{6})[[:blank:]]+/\\1\\\n/' <<< "$s"
a123456
this is a sentence
关于BSD sed use(OSX):
sed -E $'s/[[:<:]](a[[:digit:]]{6})[[:blank:]]+/\\1\\\n/' <<< "$s"
答案 2 :(得分:0)
perl的:
perl -pe 's/(?<=a\d{6})\s+/\n/'
使用look-behind,用换行符替换空格。