删除方括号外的所有数据 [英] Delete all data outside square brackets

查看:102
本文介绍了删除方括号外的所有数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何删除方括号外的所有数据 []

示例:

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

我想获得:

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


解决方案

您可以使用 [] 作为现场分离器,并打印每2场:

 的awk -F'[] []''{为(i = 2; I< NF;我+ = 2)的printf[%S]%S,$ I, OFS;打印}'<< END
[lipsum1; limpsum1; lipsum1] lipsum2; lipsum1; limpsum1; lipsum1] lipsum2
A [B] C [D]。Ë
这里没有什么
[一件事]
结束

  [lipsum1; limpsum1; lipsum1] [lipsum1; limpsum1; lipsum1]
并[b]并[d][一件事]

这怪异的字段分隔符 [] [] 是可以匹配的 [字符或] 字符。当给你的样品输入,awk将打破领域是这样的:


  1. (空字符串)

  2. lipsum1; limpsum1; lipsum1

  3. lipsum2; (带有前导空格)

  4. lipsum1; limpsum1; lipsum1

  5. lipsum2(带有前导空格)

所以,你可以看到你想要输出域#2,#4,中间用空格(加上括号后面)。结果
循环遍历场2,4,6,等等。结果
的printf 命令格式为所需的输出 - 默认OFS(输出字段分隔符)是一个空格结果。
打印,行只是增加了新行循环完成后。

How can I delete all data outside square brackets []?

Example: from

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

I want to obtain:

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

解决方案

You can use [ and ] as the field separators, and print every 2nd field:

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] 

This weird looking field separator [][] is a regular expression that matches either the [ character or the ] character. When given your sample input, awk will break down the fields like this:

  1. "" (empty string)
  2. "lipsum1;limpsum1;lipsum1"
  3. " lipsum2;" (with a leading space)
  4. "lipsum1;limpsum1;lipsum1"
  5. " lipsum2" (with a leading space)

So you can see that you want to output fields #2 and #4 (adding the brackets back) with a space in between.
The for loop iterates over fields 2, 4, 6, and so on.
The printf command formats the output as desired -- the default OFS (output field separator) is a space.
The print "" line just adds the newline after the loop is done.

这篇关于删除方括号外的所有数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆