/Hardware Overview:/,/Installations:/ p
В этом коде говорится : выведите все строки между строкой, соответствующей Обзор оборудования:
, и строкой, соответствующей Установки:
.
Второй код ничего не значит: нельзя ставить SATA Express: /
после адреса. sed
ожидает там команды или запятой, за которой следует другой адрес. Чего вы пытаетесь достичь?
$ 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:]]
не улучшит его работу, так как заменит всю строку числом в последней скобке.
Попробуйте это:sed -r 's/[^[:blank:]]*\(([[:digit:]]+)\)/\1/g'
\d
представляет собой конструкцию PCRE, а не расширенное регулярное выражение Направьте вывод в | column -t
для красоты.