Как Удалить Строки между двумя Круглыми скобками в Unix

На удаленной машине сделайте следующее:

sudo apt-get install kde-style-oxygen qt4-qtconfig
qtconfig &

После открытия qtconfig, выберите Oxygen в качестве gui стиль и измените цвет фона кнопки и фона окна, как Вы предпочитаете, затем экономите на выходе.

2
18.04.2015, 15:37
4 ответа

Используйте следующий простым сценарием PERL для удаления каждой пары скобок и их содержание даже в нескольких линиях:

#!/usr/bin/perl
undef $/;
$text = <>;
#Flags: g=match repeatedly; s=dot matches newline
$text =~ s/\(.*?\)//gs;
print $text;

Если вы хотите вписать его в командную строку, вот версия One-Liner:

perl -p0777e 's/\(.*?\)//gs' [filename]

Обратите внимание, что она короче и проще, чем решения PERL. -0777 Отключает сепаратор линии (см. Флаг -0 под человек Perlrun ), вызывая обработку всего этого файла на один шаг. Старый добрый Perl ... Это также (необычно для Perl :-)) более читаемое, чем возиться с пространством шаблона Sed.

4
27.01.2020, 21:50

Остаться \new строка (если скобки в двух последующих строках)

sed -e 's/\(^[^)]*) *\)\|([^)]*\() *\|$\)//g' filename

Сценарий состоит из трех шаблонов:

  • ^[^)]*) * от линии, начинающейся с любого символа (символов), за исключением ) до ) с пробелом (пробелами) после;
  • ([^)]* из ( любых символов, кроме )
    • -) с пробелом(ами) после; или
    • -$ (в конце строки)

-[для многострочных случаев:

sed ':1;s/([^)]*)//g;/(/{N;b1};' filename
3
27.01.2020, 21:50

Для многострочных сопоставлений с SED часто проще всего читает весь файл и выполнять ваш поиск / заменить на все содержимое:

sed -n '            # disable auto-printing
  1h                # first line, move to hold space
  1!H               # not the first line, append to hold space
  ${                # at the end of file
    x               # move hold space to pattern space
    s/([^)]*)//gp   # perform search/replace and print
  }
' file

Есть простые (*) варианты:

awk -v RS="" '{gsub(/\([^)]+\)/,"")} 1' file
perl -0777 -pe 's/\(.*?\)//sg' file

(*) »проще Май может быть в глазах смотрящего ...

1
27.01.2020, 21:50

Используя Gnu Sed.

-z (Null separated records), sed slurps все входные данные в виде одной записи. Пожалуйста, попробуйте:

sed -ze 's/([^()]*)//g'
2
27.01.2020, 21:50

Теги

Похожие вопросы