如何删除方括号之外的所有数据?
示例:来自

[lipsum1;limpsum1;lipsum1] lipsum2;[lipsum1;limpsum1;lipsum1] lipsum2

我想得到:
[lipsum1;limpsum1;lipsum1] [lipsum1;limpsum1;lipsum1]

最佳答案

您可以使用[]作为字段分隔符,并每两个字段打印一次:

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

[lipsum1;limpsum1;lipsum1] [lipsum1;limpsum1;lipsum1]
[b] [d]

[one thing]

这个看起来奇怪的字段分隔符[][]是一个正则表达式,它匹配[字符或]字符。当给出您的示例输入时,awk将按如下方式分解字段:
“”(空字符串)
“唇膏1;唇膏1;唇膏1”
“lipsum2;”(带前导空格)
“唇膏1;唇膏1;唇膏1”
“lipsum2”(带前导空格)
因此,您可以看到您希望输出的字段2和4(后面加上括号)之间有一个空格。
for循环遍历字段2、4、6等。
printf命令根据需要格式化输出——默认的ofs(输出字段分隔符)是一个空格。
print ""行只是在循环完成后添加换行符。

关于linux - 删除方括号外的所有数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23298138/

10-16 20:06