Awk还是grep问题

Awk还是grep问题,awk,grep,Awk,Grep,我有这个数据文件 [abc] def ghi [jkl] [mno] 从这个文件;我可以运行grep并轻松获取所有包含“[”的行。如何获取“[]”内的文本内容 例如: abc jkl mno 谢谢grep“\[”| sed-e's/\[/'-e's/\]/'尝试一下: sed -n 's/\[\([^]]*\)\]/\1/p' 或 或 grep-Po'(? 说明:-n禁止将每一行打印到标准输出,但正则表达式末尾的/p重新启用此行为,导致打印所有匹配的行。正则表达式本身匹配括号之间的所有内容

我有这个数据文件

[abc]
def
ghi
[jkl]
[mno]
从这个文件;我可以运行grep并轻松获取所有包含“[”的行。如何获取“[]”内的文本内容

例如:

abc
jkl
mno
谢谢

grep“\[”| sed-e's/\[/'-e's/\]/'

尝试一下:

sed -n 's/\[\([^]]*\)\]/\1/p'

grep-Po'(?

说明:-n禁止将每一行打印到标准输出,但正则表达式末尾的
/p
重新启用此行为,导致打印所有匹配的行。正则表达式本身匹配括号之间的所有内容,并用它替换整行。

以下是使用awk的方法

$ cat file
[abc]
def [ xxx]
ghi
[jkl]
[mno]
[zz
zzzz]


$ awk 'BEGIN{RS="]";FS="["}/\[/{print $NF }' file
abc
 xxx
jkl
mno
zz
zzzz
红宝石(1.9+)

或者你也可以用壳来做

$ var=$(<file)
$ IFS="]"
$ set -- $var
$ for i in $@; do echo ${i##*[}; done

$var=$(我得到错误sed:-e expression#1,char 5:Unterminated's’command我已经用cygwin测试过了,它是有效的。看一下backslahs。我已经尝试过解释它的大部分内容。正则表达式转义方括号,启用分组,并匹配任何重复零次或多次的字符,然后是一个右括号。然后用t替换整个字符串如果数据与我在回答中显示的数据相似,您的答案将无效如果数据与我在回答中显示的数据相似,
sed
解决方案可能需要增强。
sed -n 's/\[\(.*\)\]/\1/p' file
$ cat file
[abc]
def [ xxx]
ghi
[jkl]
[mno]
[zz
zzzz]


$ awk 'BEGIN{RS="]";FS="["}/\[/{print $NF }' file
abc
 xxx
jkl
mno
zz
zzzz
 ruby -0777 -ne 'puts $_.scan(/\[(.*?)\]/m)' file
$ var=$(<file)
$ IFS="]"
$ set -- $var
$ for i in $@; do echo ${i##*[}; done