正则表达式匹配方括号一次

4

有一个文本文件,其中包含以下信息:

[[parent]]

[son]

[daughter]

如何仅获取[son]和[daughter]?

$0 ~ /\[([a-z])*\]/        ???

请注意,[a-z] 并不一定只匹配小写字母,除非这正是您想要的。根据您的语言环境设置,[a-z] 可能会匹配 aAbBcC...yYz 或其他内容。为了始终仅匹配小写字母,请改用 POSIX 字符类 [[:lower:]] - Ed Morton
3个回答

4
你的正则表达式几乎正确。只需将*放在圆括号内(以便将整个文本放入唯一组中),并记得使用^$定界符(以避免匹配[[parent]]):
^\[([a-z]*)\]$

3

匹配以字母开头的任何方括号。

awk '/^\[[a-z]/' file

您可能希望在字符类中添加大写字母和/或数字,具体取决于您的实际要求。(您的示例仅显示小写字母,因此我假设这是一个有效的概括。)

是的,我只需要小写字母。谢谢! - 6axter82

2
你可以使用以下awk命令:
awk -F '[][]+' 'NF && !/\[\[/{print $2}' file
son
daughter

awk命令解析:

-F '[][]+'     # set input field separator as 1 or more of [ or ]
NF             # only if at least one field is found
!/\[\[/        # when input doesn't start with [[

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接