关于在FS中包含带转义字符的空格的基本awk问题

问题描述 投票:0回答:2

请原谅基本问题。我已经阅读了大量相关主题,也没有偶然发现可行的解决方案。

只需要获取“ [”和“]”之间字符串的内容。注意其中的空格。

代码:

echo "*** This is a bunch of text output [ xxxxxxxxxx ]." | awk -F "[\\\[|\\\]]" '{print $2}'
 xxxxxxxxxx 

我最终在输出中出现前导和尾随空格。我尝试了许多不同的变体,以尝试获取文字或正则表达式匹配项,以将方括号空格作为FS一起包括在内,但没有成功。我敢肯定我缺少一些超级基础的东西,因为这对我来说真的很新。

我想我可以删除前导空格和尾随空格作为第二个操作,但是如果我能正确获得FS格式,似乎应该可以在awk语句中完成它。

谢谢!

regex bash awk
2个回答
3
投票

*之前和之后放置[\[\]]以匹配空格。另外,您无需在字符集中输入|

echo "*** This is a bunch of text output [ xxxxxxxxxx ]." | awk -F ' *[][] *' -v '{print $2}'

此外,awk不支持字符类内部的转义的[]。包含这些字符的方法是将]放在开头-您不能有一个空字符集,因此这表明它是实际字符而不是字符集的结尾。


0
投票

这是我想出的。

echo "*** This is a bunch of text output [ xxxxxxxxxx ]." | awk -F'[][ ]+' '{print $(NF-1)}'
© www.soinside.com 2019 - 2024. All rights reserved.