sed one-liner, чтобы удалить все между парой скобок?


15

Я работаю с текстом, который в скобках [] заполнен вещами, которые мне не нужны. Поскольку я могу удалить скобки самостоятельно, мне не нужен однострочный, чтобы сделать это для меня, но мне нужен однострочный, который удалит все между ними.

А как насчет скобок () вместо скобок?

Ответы:


20

Заменить [some text]на пустую строку. Предполагая, что вы не хотите анализировать вложенные скобки, some textони не могут содержать скобки.

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

Обратите внимание, что в выражении в скобках, [^][]чтобы соответствовать чему-либо, кроме [или ], ]должен идти первым. Обычно a ]заканчивает набор символов, но если это первый символ в наборе (здесь, после ^символа дополнения), он ]обозначает себя.

Если вы хотите разобрать вложенные скобки или текст в квадратных скобках может занимать несколько строк, sed не является правильным инструментом.


спасибо, @Gilles ... кстати, он может занимать несколько строк, но я использую сценарий Perl для объединения строк ...
ixtmixilix

@ixtmixilix: Если у вас есть скрипт на Perl, вы можете также удалить текст в квадратных скобках. В Perl вы можете писать s/\[[^\[\]]*\]//g(то есть использовать обратную косую черту для экранирования членов набора символов).
Жиль "ТАК - перестань быть злым"

@ Жиль, не могли бы вы рассказать подробнее о [^] [], пожалуйста? спасибо
Arash

1
@arashams […]= набор символов. ^как первый символ означает дополнить набор. ]обычно будет означать конец набора, но если это первый символ, отличный от ^обычного символа - пустой набор или дополнение пустого набора не допускаются. Тогда [это обычное и ]заканчивается набор.
Жиль "ТАК - перестань быть злым"

@Gilles tnx за вашу помощь, но я до сих пор не понимаю :( Какую дозу это значит? »^ Как первый символ означает дополнить набор« я имею в виду, что он делает? Например, соответствует ли он всему содержимому? »
Араш

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.