Sed';s"+&引用;量词似乎不匹配任何东西
我有一个文件sedTest.txt,内容如下:Sed';s"+&引用;量词似乎不匹配任何东西,sed,Sed,我有一个文件sedTest.txt,内容如下: sdjalsh ABC 123 ashfaladhs ldjkasf ABC 234 dadas afsf dafsafs ABC 876 asf dasfaf 我只想输出那些123,234,876 我可以使用 cat sedTest.txt | sed s"/.*ABC \([0-9]+\).*/\1/" 我这样使用它,因为通常是grep而不是cat,在本例中可能是 grep ABC sedTest.txt | sed s"/.*ABC \(
sdjalsh ABC 123 ashfaladhs
ldjkasf ABC 234 dadas afsf
dafsafs ABC 876 asf dasfaf
我只想输出那些123
,234
,876
我可以使用
cat sedTest.txt | sed s"/.*ABC \([0-9]+\).*/\1/"
我这样使用它,因为通常是grep而不是cat,在本例中可能是
grep ABC sedTest.txt | sed s"/.*ABC \([0-9]+\).*/\1/"
这在这里没有真正的意义,但这是日志的典型用法
我想知道:为什么使用
[0-9]+
不起作用?我希望得到与[0-9]*
相同的结果,但似乎没有任何内容被替换(并打印未更改的内容)。+
是ERE元字符,sed默认使用BRE。使用sed-E…+代码>或sed…\+
启用+
s ERE属性,例如
grep 'ABC' sedTest.txt | sed -E 's/ABC ([0-9]+).*/\1/'
请注意,当您使用-E
并且前面的*
没有做任何有用的事情时,您不再需要转义paren来启用它们的ERE元字符属性,因此我将其去掉。此外,您不需要grep+sed,这可以:
sed -E -n 's/ABC ([0-9]+).*/\1/p' sedTest.txt
但更重要的是,您应该真正使用:
awk '$2=="ABC"{print $3}' sedTest.txt
而是为了清晰、简单、健壮、可移植性等
请务必注意,您应该将脚本(sed、awk、grep等)括在单引号(”
)中,而不是双引号(“
)除非shell决定在工具看到脚本中的某些值之前解释它们,否则您会感到意外。+
是ERE元字符,sed默认使用BRE。可以使用sed-E…+…
或sed…\+…
来启用+
的ERE属性,例如
grep 'ABC' sedTest.txt | sed -E 's/ABC ([0-9]+).*/\1/'
请注意,当您使用-E
时,您不再需要转义paren以启用其ERE元字符属性,并且前面的*
没有任何用处,因此我将其删除。此外,您不需要grep+sed,这可以:
sed -E -n 's/ABC ([0-9]+).*/\1/p' sedTest.txt
但更重要的是,您应该真正使用:
awk '$2=="ABC"{print $3}' sedTest.txt
而是为了清晰、简单、健壮、可移植性等
请务必注意,您应该将脚本(sed、awk、grep等)用单引号(”
)括起来,而不是用双引号(“
)括起来,除非当shell决定在您的工具看到脚本中的某些值之前解释它们时,您会感到意外。感谢您澄清这一点。您可以添加一些更详细地描述ERE/BRE的链接(或其他参考资料)。在你发完帖子后,我注意到sed手册页面上有这个首字母缩略词……不,只是用谷歌搜索一下。理解BRE/ERE是编写shell脚本的基础,为这些脚本添加链接就像添加描述“如果”和“那么”的链接一样。感谢您的澄清。您可以添加一些更详细地描述ERE/BRE的链接(或其他参考资料)。在你发完帖子后,我注意到sed手册页面上有这个首字母缩略词……不,只是用谷歌搜索一下。理解BRE/ERE是编写shell脚本的基础,为这些脚本添加链接就像添加描述“如果”和“那么”的链接一样。