有一个包含以下信息的文本文件:
[[parent]]
[son]
[daughter]
如何只获得[儿子]和[女儿]?
$0 ~ /\[([a-z])*\]/ ???
答案 0 :(得分:3)
你的正则表达式几乎是正确的。只需将*
放在圆括号内(以便将整个文本放在唯一的组中)并记住使用^
和$
分隔符(以避免匹配{{1} }):
[[parent]]
答案 1 :(得分: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 [[
答案 2 :(得分:2)
匹配下一个字符为字母的行首的任何方括号。
awk '/^\[[a-z]/' file
您可能希望将大写和/或数字添加到角色类中,具体取决于您的真实需求。 (你的例子只显示小写,所以我认为这是一个有效的概括。)
答案 3 :(得分:1)
如果一切都在自己的路线上,那么Andrea的正则表达式就可以了。如果在其他文本中混合使用,并且如果有的话,消除[[text]和[text]]上的匹配,你应该在前面和后面看;
(?<!\[)\[([a-z]*)\](?!\])
说明:
(?<!\[) # The character to the left is not [
\[ # One [
([a-z]*) # Any number of lower case letters in a capture group
\] # One ]
(?!\]) # The next character is not ]