Замена команды Sed, как вы обрабатываете пробелы или несколько пробелов как один?

Я использую эту команду для вставки строки. Если в шаблоне есть пробел между двумя записями в тексте или файле, он печатает содержимое в новой строке. Это работает нормально, однако иногда я встречаю 2 пробела или 3 пробела вместо одного, который я ищу в шаблоне, поэтому я получаю дополнительные пустые строки.

sed "s/ /\n/g"

Я хочу напечатать новую строку, только sed найдет что-то в шаблоне. Как мне использовать команду sed для обработки 1 пробела, двойного или тройного пробела в качестве одной замены?


person theuniverseisflat    schedule 25.04.2014    source источник
comment
Я знаю, что это sed вопрос. Но этого можно добиться tr -s ' ' '\n'   -  person Shiplu Mokaddim    schedule 25.04.2014
comment
А также от awk '$1=$1' OFS='\n'   -  person devnull    schedule 25.04.2014
comment
@shiplu.mokadd.im Нет смысла добавлять опцию в комментарии после того, как она была указана в одном из ответов.   -  person devnull    schedule 25.04.2014


Ответы (2)


Вам нужен квантификатор:

sed "s/  */\n/g"

or

sed 's/ \+/\n/g'       # With GNU sed

or

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

or

sed 's/ \{1,\}/\n/g'

or

sed -r 's/ {1,}/\n/g'

Если вы используете BSD sed,

sed 's/  */\'$'\n''/g'

or

sed -r 's/ +/\'$'\n''/g'

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

tr -s ' ' '\n'

Опция -s сжимает повторы символа в наборе 1, т. е. ' ' в этом примере.

person devnull    schedule 25.04.2014
comment
второй не переносной. - person Shiplu Mokaddim; 25.04.2014
comment
@shiplu.mokadd.im Спасибо, добавил примечание. Также добавлены опции для BSD sed. - person devnull; 25.04.2014

Я бы сделал что-то вроде...

sed -e 's/\s\+/\n/g' [filename]

Чтобы найти и заменить один или несколько пробелов новой строкой.

person Galzzly    schedule 25.04.2014