Как я заставляю команду 'TR' игнорировать новую строку?

Я хочу заменить несколько пробелов одиночным пробелом. Я использую tr сделать это. Но это также заменяет новую строку пространством. Как я могу избежать его?

Код:

tr -s [:space:] ' '

Вход:

He  llo
Wor  ld
how  are  you

Требуемый вывод:

He llo
Wor ld
how are you

Мой вывод:

He llo Wor ld how are you
2
задан 31 August 2014 в 02:43

2 ответа

:space: соответствия и горизонтальный и вертикальный пробел. Используйте :blank: вместо этого для соответствия горизонтальному пробелу только.

8
ответ дан 5 August 2019 в 07:40

Можно использовать собственный метод:
просто используйте единственный tr -s [:space:] без ' ' в конце

или

Можно использовать одну из этих команд:

С командой TR:

tr -s ' '             < input.txt > output.txt
tr -s '[:blank:]'     < input.txt > output.txt
tr -s \               < input.txt > output.txt


С командой sed:

sed 's/  */ /g'              < input.txt > output.txt
sed 's/ \{1,\}/ /g'          < input.txt > output.txt
sed 's/ \+ / /g'             < input.txt > output.txt
sed -e "s/[[:space:]]\+/ /g" < input.txt > output.txt


с командой awk:

awk '{$0=tolower($0);$1=$1}1' < input.txt > output.txt
awk '$1=$1'                   < input.txt > output.txt
awk '{$1=$1}1' OFS=" "        < input.txt > output.txt


Вывод каждого эти команды как tha нормален следующим образом:

He llo
Wor ld
how are you


Примечание: Ваш файл сохранен как имя "input.txt" и произведен записанный в новый файл под названием "output.txt".
1
ответ дан 2 December 2019 в 01:30

Другие вопросы по тегам:

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