如何删除方括号之外的所有数据?
示例:来自
[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/