захват с помощью sed

У меня есть такой файл

x + chrX 15362 15364 + 100(3) *(0) *(0) *(0) 100(5) *(0) 100(1) y + chrX 153626 153626 + 100(80) 98.56(79) 100(40) 100(47) 100(88) 4(23) 

Я хочу захватить значения в круглых скобках и просто распечатать их так, чтобы вывод выглядел следующим образом

 x + chrX 15362 15364 + 3 0 0 0 5 0 1 y + chrX 153626 153626 + 80 79 40 47 88 23 

Я хочу сделать это в седе.

Я пробовал что-то подобное, но это не работает

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

Также, как я могу избавиться от всего, что в скобках, включая скобки, чтобы я также получил следующий вывод

 x + chrX 15362 15364 + 100 * * * 100 * 100 y + chrX 153626 153626 + 100 98.56 100 100 100 4 

 $ 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 | column -t для красивости.