用单线删除一对方括号之间的所有内容?


15

我正在处理一些不需要的方括号[]中的内容。因为我可以自己删除括号,所以我不需要单衬板为我做这件事,但是我确实需要单衬板来将它们之间的所有东西都去除。

括号()而不是括号呢?

Answers:


20

替换[some text]为空字符串。假设您不想解析嵌套的方括号,some text则不能包含任何方括号。

sed -e 's/\[[^][]*\]//g'

请注意,在方括号表达式中[^][],除了[或之外],其他任何内容都]必须匹配。通常,a ]会结束字符集,但是如果它是字符集中的第一个字符(在此是^补字符之后),则]代表自身。

如果您确实想解析嵌套的方括号,或者如果方括号中的文本可以跨越多行,则sed不是正确的工具。


谢谢,@ Gilles ...顺便说一句,它可以跨越多行,但是我正在使用Perl脚本来加入行...
ixtmixilix

@ixtmixilix:如果您有Perl脚本,也可以使其删除括号内的文本。在Perl中,您可以编写s/\[[^\[\]]*\]//g(即使用反斜杠转义字符集的成员)。
吉尔(Gilles)“所以,别再邪恶了”,

@Gilles您能否详细解释[^] []。谢谢
Arash

1
@arashams […]=字符集。^作为第一个字符意味着对集合的补充。]通常会被标记为集合的结尾,但如果它是以外的第一个字符,则为^普通字符-空集合或空集合的补码是不允许的。然后[是普通的并]结束设定。
吉尔斯(Gilles)'“ SO-不要邪恶”

@Gilles tnx为您提供帮助,但我仍然不明白:(这是什么意思?“ ^作为第一个字符意味着对集合的补充”我的意思是它在做什么?例如,它与所有内容都匹配吗?
Arash

9

该命令sed -e 's/([^()]*)//g'将执行括号而不是括号。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.