sed или perl Удалить внешние скобки, только если первое внутреннее слово соответствует - PullRequest
3 голосов
/ 27 мая 2011

Используя GNU sed, мне нужно удалить фразы в скобках, такие как (click here ....), включая скобки.Текст, следующий за click here, варьируется, но мне нужно убрать все внешние скобки.

Я пробовал много вариантов следующего, но, похоже, не могу найти правильный:

sed -e 's/\((click here.*[^)]*\)//'

РЕДАКТИРОВАТЬ Глупо Я не заметил, что на самом деле часто есть разрыв строки в середине строки в скобках, поэтому sed, вероятно, не будет работать.Пример:

(click here to
enter some text)

Ответы [ 3 ]

3 голосов
/ 27 мая 2011

Если нет вложенных паренов, возможно, вы можете попробовать что-то вроде:

sed -e 's/(click here [^)]*)//'
2 голосов
/ 27 мая 2011

С Perl вы можете запустить:

perl -00 -pe "s/\(click here [^)]*\)//g" inputfile > outputfile

Он будет читать входной файл в строке, затем заменять все вхождения (click here anychar but '(' ), а затем выводить все в выходном файле.

1 голос
/ 30 мая 2011

Вот еще один подход sed, который сохраняет весь ввод в буфере удержания:

# see http://austinmatzko.com/2008/04/26/sed-multi-line-search-and-replace/
echo '
()
(do not delete this)
()
(click here to
enter some text)
()
' | 
sed -n '1h;1!H;${;g;s/(\([^)]*\))/\1/g;p;}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...