sed:在 [6 位数字] 和 space 之后换行
sed: newline after a[6 digits] and space
我正在尝试将 [6 位数字] 之后的 space 替换为换行符,我曾尝试使用
sed 's/a\d{6}\s\+/\n/' old > new
例如:
a123456 this is a sentence
会变成:
a123456
this is a sentence
我也愿意接受 linux 中允许我执行此操作的任何其他程序,例如 awk、perl 或 bash。
首先,我建议在此处使用 POSIX 扩展正则表达式和 sed -r
来简化模式。
POSIX 正则表达式甚至 POSIX 扩展正则表达式(使用 -r
)不支持字符 类 的 \d
或 \s
例如 Perl。我会使用以下模式:
sed -r 's/(a[0-9]{6}) +/\n/' old > new
请注意,我将 space 之前的所有内容都捕获到捕获组中,并在替换模式中使用此组 </code>。</p>
<p>然而,在 POSIX 正则表达式中确实有可用的命名字符 类,但它们的输入时间比在 Perl 中长。如果你想使用命名字符类,你可以使用:</p>
<pre><code>sed -r 's/(a[[:digit:]]{6})[[:space:]]+/\n/' old > new
在这种情况下。如果您想了解更多关于 POSIX 正则表达式中可用字符 类 的信息,请查看 grep
and/or egrep
.
的联机帮助页
您可以使用:
s='a123456 this is a sentence'
sed -r $'s/\<(a[[:digit:]]{6})[[:blank:]]+/\1\\n/' <<< "$s"
a123456
this is a sentence
在 BSD 上使用 sed (OSX):
sed -E $'s/[[:<:]](a[[:digit:]]{6})[[:blank:]]+/\1\\n/' <<< "$s"
perl:
perl -pe 's/(?<=a\d{6})\s+/\n/'
使用回溯,用换行符替换空格。
我正在尝试将 [6 位数字] 之后的 space 替换为换行符,我曾尝试使用
sed 's/a\d{6}\s\+/\n/' old > new
例如:
a123456 this is a sentence
会变成:
a123456
this is a sentence
我也愿意接受 linux 中允许我执行此操作的任何其他程序,例如 awk、perl 或 bash。
首先,我建议在此处使用 POSIX 扩展正则表达式和 sed -r
来简化模式。
POSIX 正则表达式甚至 POSIX 扩展正则表达式(使用 -r
)不支持字符 类 的 \d
或 \s
例如 Perl。我会使用以下模式:
sed -r 's/(a[0-9]{6}) +/\n/' old > new
请注意,我将 space 之前的所有内容都捕获到捕获组中,并在替换模式中使用此组 </code>。</p>
<p>然而,在 POSIX 正则表达式中确实有可用的命名字符 类,但它们的输入时间比在 Perl 中长。如果你想使用命名字符类,你可以使用:</p>
<pre><code>sed -r 's/(a[[:digit:]]{6})[[:space:]]+/\n/' old > new
在这种情况下。如果您想了解更多关于 POSIX 正则表达式中可用字符 类 的信息,请查看 grep
and/or egrep
.
您可以使用:
s='a123456 this is a sentence'
sed -r $'s/\<(a[[:digit:]]{6})[[:blank:]]+/\1\\n/' <<< "$s"
a123456
this is a sentence
在 BSD 上使用 sed (OSX):
sed -E $'s/[[:<:]](a[[:digit:]]{6})[[:blank:]]+/\1\\n/' <<< "$s"
perl:
perl -pe 's/(?<=a\d{6})\s+/\n/'
使用回溯,用换行符替换空格。