Tux*_*ife 4 command-line text-processing
我该如何转换:
foo (blah) (bar 80)
foo (cats) (blat 92)
Run Code Online (Sandbox Code Playgroud)
对此:
foo bar 80
foo blat 92
Run Code Online (Sandbox Code Playgroud)
我想保留所有不在括号中的文本。
我只想提取括号之间包含字符串“bar”或“blat”的文本。
不包含“blat”或“bar”的括号对应该被忽略。
sed 或 awk 会更受欢迎
使用sed
:
< inputfile sed 's/(\([^\)]*\(bar\|blat\)[^\)]*\))/\1/g; s/(.*) //g'
Run Code Online (Sandbox Code Playgroud)
输入文件:
test (bar) (blat)
bar (testblat) (bartest)
blat (testbar) (barblat) (no) (blatanother)
Run Code Online (Sandbox Code Playgroud)
输出文件:
test bar blat
bar testblat bartest
blat testbar barblat blatanother
Run Code Online (Sandbox Code Playgroud)
细分:
#1:
(
: 匹配一个(
字符\(
: 开始对捕获组进行分组[^\)]*
: 不匹配 0 个或多个字符 )
\(
: 开始对允许的字符串进行分组bar
: 匹配第一个允许的字符串\|
: 分隔第二个允许的字符串blat
: 匹配第二个允许的字符串\)
: 停止对允许的字符串进行分组[^\)]*
: 不匹配 0 个或多个字符 )
\)
: 停止对捕获组进行分组)
: 匹配一个)
字符#2:
(
: 匹配一个(
字符.*
: 匹配 0 个或多个字符)
: 匹配一个)
字符
: 匹配一个
字符