используя регулярные выражения regex в sed - PullRequest
4 голосов
/ 26 августа 2010

Я хотел бы удалить несколько пробелов в файле с одним символом.Пример

cat      kill    rat
dog      kill    cat

Я использовал следующее регулярное выражение, которое, похоже, соответствовало http://www.regexpal.com/, но не работало в sed.

([^ ])*([ ])*

Я использовал команду sed какитак:

sed s/\(\[\^\ \]\)*\(\[\ \]\)*/\$1\|/g < inputfile

Я ожидаю,

cat|kill|rat
dog|kill|cat

Но я не мог заставить его работать.Любая помощь приветствуется.Спасибо.

Редактировать: пожалуйста, обратите внимание, что кошка / собака может быть любым символом, кроме пробела.

Ответы [ 4 ]

5 голосов
/ 26 августа 2010

sed обратные ссылки с обратной косой чертой, поэтому используйте \ 1 вместо $ 1.Окружите свои выражения кавычками:

sed 's/match/replace/g' < inputfile

Manpages - лучшее изобретение в мире Linux: man sed

Следите за *, оно может действительно соответствоватьНИЧЕГО ТАКОГО.Если вы хотите заменить несколько пробелов на '|', используйте это RE:

sed -r 's/ +/\|/g'

С man sed:

-r, --regexp-extended
   use extended regular expressions in the script.

Вам не нужны обратные ссылки, если вы простохочу заменить все пробелы.Замените (пробел) на \s, если вы хотите сопоставить вкладки.

1 голос
/ 13 марта 2016

я знаю, что OP хотел с помощью sed и что вопрос старый, но как насчет ввода tr -s?

0 голосов
/ 03 июля 2013

Вы можете использовать:

sed -e 's / [[: blank:]] / \ | / g'

whete [: blank:] это пробел и табуляциясимволы

0 голосов
/ 26 августа 2010

А как же:

s/\s+/\|/g
...