在某些文本文件中有许多[with text inside]
。我只想打印括号内的任何内容。括号的数量是文件未知,每个要解析的文件都不同。
我尝试用sed
解析它,但无法做到。
答案 0 :(得分:3)
使用GNU grep
grep -oP '(?<=\[)[^]]*'
使用开放式括号的正面后视,匹配所有非闭括号字符。 例如:
$ echo 'foo [bar] baz [hello world]' | grep -oP '(?<=\[)[^]]*'
bar
hello world
答案 1 :(得分:1)
perl -nE'say for /\[( [^\[\]]* )\]/xg;'
或者如果内容可以跨越行。
perl -0777nE'say for /\[( [^\[\]]* )\]/xg;'
您可以将文件名作为参数传递,也可以使用STDIN。
答案 2 :(得分: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"
$
答案 3 :(得分:0)
这可能适合你(GNU sed):
sed ':a;/\[/!d;/\]/!{$!N;s/\n/ /;ba};s/[^[]*\[\([^]]*\)\]/\1\n/;P;D' file
N.B。它用空格替换[...]
内的换行符。