Захват с использованием SED

/Hardware Overview:/,/Installations:/ p

В этом коде говорится : выведите все строки между строкой, соответствующей Обзор оборудования: , и строкой, соответствующей Установки: .

Второй код ничего не значит: нельзя ставить SATA Express: / после адреса. sed ожидает там команды или запятой, за которой следует другой адрес. Чего вы пытаетесь достичь?

0
06.09.2018, 19:44
2 ответа
$ sed 's/([^)]*)//g' file
x   +   chrX    15362   15364   +   100  *    *    *    100  *    100
y   +   chrX    153626  153626  +   100 98.56   100 100 100 4

Здесь мы используем sedдля удаления любых скобок во входных данных. Выражение ([^)]*)соответствует левой скобке, за которой следует любое количество не -символов правой скобки (, то есть число ), за которым следует правая скобка. Вы также можете использовать здесь ([0-9]*).

$ sed 's/[^[:blank:]]*(\([^)]*\))/\1/g' file
x   +   chrX    15362   15364   +   3  0    0    0    5  0    1
y   +   chrX    153626  153626  +   80 79   40 47 88 23

Здесь мы удаляем бит перед скобкой и сами скобки и заменяем все это тем, что было внутри скобки. Вещи перед (соответствуют [^[:blank:]]*, т. е. любому количеству не -пробелов, за которыми следует то же выражение, что и в первой команде sed, но с захватом содержимого между (и ). ]. Захваченная строка упоминается в замещающей части команды как \1.


Ваша команда,

sed -r 's/^.*\((\d+)\)/\1/g'

не работает должным образом, потому что \dявляется PCRE (Perl -подобным регулярному выражению ). Замена \dна [0-9]или [[:digit:]]не улучшит его работу, так как заменит всю строку числом в последней скобке.

1
28.01.2020, 02:31

Попробуйте это:sed -r 's/[^[:blank:]]*\(([[:digit:]]+)\)/\1/g'

  • находит ноль или более символов, не являющихся -пробелами, за которыми следует открывающая скобка, за которой следуют цифры (захват ), за которой следует закрывающая скобка
  • заменить только захваченными цифрами
  • сделать это глобально в строке
  • \dпредставляет собой конструкцию PCRE, а не расширенное регулярное выражение

Направьте вывод в | column -tдля красоты.

1
28.01.2020, 02:31

Теги

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