Linux 删除方括号外的所有数据
如何删除方括号之外的所有数据Linux 删除方括号外的所有数据,linux,bash,shell,Linux,Bash,Shell,如何删除方括号之外的所有数据[] 示例:来自 [lipsum1;limpsum1;lipsum1] lipsum2;[lipsum1;limpsum1;lipsum1] lipsum2 我想获得: [lipsum1;limpsum1;lipsum1] [lipsum1;limpsum1;lipsum1] 您可以使用[和]作为字段分隔符,并每隔2个字段打印一次: awk -F '[][]' '{for (i=2; i<NF; i+=2) printf "[%s]%s", $i, OFS;
[]
示例:来自
[lipsum1;limpsum1;lipsum1] lipsum2;[lipsum1;limpsum1;lipsum1] lipsum2
我想获得:
[lipsum1;limpsum1;lipsum1] [lipsum1;limpsum1;lipsum1]
您可以使用
[
和]
作为字段分隔符,并每隔2个字段打印一次:
awk -F '[][]' '{for (i=2; i<NF; i+=2) printf "[%s]%s", $i, OFS; print ""}' <<END
[lipsum1;limpsum1;lipsum1] lipsum2;[lipsum1;limpsum1;lipsum1] lipsum2
a [b] c [d] e
nothing here
[one thing]
END
这个奇怪的字段分隔符[]]
是一个正则表达式,它匹配[
字符或]
字符。当给出示例输入时,awk将分解如下字段:
for
循环迭代字段2、4、6等。printf
命令根据需要格式化输出——默认的OFS(输出字段分隔符)是一个空格。print”“
行只在循环完成后添加换行符。您可以使用[
和]
作为字段分隔符,每2个字段打印一次:
awk -F '[][]' '{for (i=2; i<NF; i+=2) printf "[%s]%s", $i, OFS; print ""}' <<END
[lipsum1;limpsum1;lipsum1] lipsum2;[lipsum1;limpsum1;lipsum1] lipsum2
a [b] c [d] e
nothing here
[one thing]
END
$ sed -e 's/^[^\[]*//;s/\][^\[]*\[/\] \[/g;s/[^]]*$//;' <<'EOF'
lipsum0 [lipsum1;limpsum1;lipsum1] lipsum2;[lipsum1;limpsum1;lipsum1] lipsum2
EOF
[lipsum1;limpsum1;lipsum1] [lipsum1;limpsum1;lipsum1]
这个奇怪的字段分隔符[]]
是一个正则表达式,它匹配[
字符或]
字符。当给出示例输入时,awk将分解如下字段:
for
循环迭代字段2、4、6等。printf
命令根据需要格式化输出——默认的OFS(输出字段分隔符)是一个空格。print”“
行只在循环完成后添加换行符。$sed-e's/^[^\[]*/;s/\][^\[]*[/\]\[/g;s/[^]]*/;“$sed-e's/^[^\[]*/;s/\][^\[]*\[*\[/\]\\[/g;s/^]]*$/;“仅供参考,这些是方括号,不是圆括号。仅供参考,这些是方括号,不是圆括号。这将在每行末尾添加一个空格,除了空行。不行!商业秘密!;)我将在我的回答中添加一些注释这将在每行末尾添加一个空格,除了空行。不行!商业秘密!;)我将在我的回答中添加一些注释@I0b0,它工作顺利,谢谢,但好奇…你说标准化是什么意思?没有不匹配的单个[
或]
字符。@I0b0,它工作顺利,谢谢,但好奇…你说标准化是什么意思?没有不匹配的单个[
或]
字符。
$ sed -e 's/^[^\[]*//;s/\][^\[]*\[/\] \[/g;s/[^]]*$//;' <<'EOF'
lipsum0 [lipsum1;limpsum1;lipsum1] lipsum2;[lipsum1;limpsum1;lipsum1] lipsum2
EOF
[lipsum1;limpsum1;lipsum1] [lipsum1;limpsum1;lipsum1]