0

在一些文本文件中有很多[with text inside]. 我只想打印括号内的任何内容。括号的数量是文件是未知的,每个要解析的文件都不同。

我试图用 解析它sed,但做不到。

4

4 回答 4

3

使用 GNU grep

grep -oP '(?<=\[)[^]]*'

对左括号使用正向后视,匹配所有非右括号字符。例子:

$ echo 'foo [bar] baz [hello world]' | grep -oP '(?<=\[)[^]]*'
bar
hello world
于 2013-03-30T03:22:48.480 回答
1
perl -nE'say for /\[( [^\[\]]* )\]/xg;'

或者如果内容可以跨行。

perl -0777nE'say for /\[( [^\[\]]* )\]/xg;'

您可以将文件名作为参数传递,也可以使用 STDIN。

于 2013-03-30T02:45:37.763 回答
1

或者,您可以尝试:

awk 'NR>1{print $1}' RS=\[ FS=\] file

例如

$ printf 'First part of foo [bar] not present, ["hello" can be\non a different\nline from "world" ] inside  brackets\n' |
awk 'NR>1{print $1}' RS=\[ FS=\]
bar
"hello" can be
on a different
line from "world"
$
于 2013-03-30T04:51:43.243 回答
0

这可能对您有用(GNU sed):

sed ':a;/\[/!d;/\]/!{$!N;s/\n/ /;ba};s/[^[]*\[\([^]]*\)\]/\1\n/;P;D' file

[...]注意它用空格替换 a 中的换行符。

于 2013-03-30T08:36:08.877 回答