Замените все пробелы в текстовом файле запятыми

10

Мне нужно заменить все пробелы внутри моего текста запятыми. В настоящее время я использую эту строку, но она не работает: я получаю в качестве вывода текстовый файл, который в точности совпадает с исходным:

sed 's/[:blank:]+/,/g' orig.txt > modified.txt

Спасибо

aneuryzm
источник
sed 's / [[: blank:]] \ + /, / g'
mug896
@ mug896 работал на меня в Ubuntu 18.04 Мне нужны были двойные квадратные скобки и \ before +
dmontaner

Ответы:

15

С sed:

sed -e 's/\s\+/,/g' orig.txt > modified.txt

Или с perl:

perl -pne 's/\s+/,/g' < orig.txt > modified.txt

Редактировать: чтобы исключить новые строки в Perl, вы можете использовать двойной отрицательный знак 's/[^\S\n]+/,/g'или совпадать только с символами пробела по вашему выбору 's/[ \t\r\f]+/,/g'.

Калеб
источник
Спасибо, однако, все еще есть проблема: я не хочу заменять «следующие строки \ n» запятой, и команда с perl в настоящее время делает это. Она написала команду, которую вы написали, она все еще не работает.
aneuryzm
Извините, вам нужно сбежать от +оператора в sed, я только что обновил свой ответ. Символы новой строки - это whitepsace в perl, поэтому вам придется делать свой класс whitepsace вручную, если вы не хотите его включать. Я также добавил два решения для этого.
Калеб
13

Использование tr:

tr -s '[:blank:]' ',' <file

Это заменит любой горизонтальный пробел запятой. Любые повторяющиеся пробелы будут заменены только одной запятой.

Стивен Д
источник
-1
awk '{print $1","}' Servers | tr -d '[\n]' | xargs echo 

Здесь имя файла - Серверы. Содержит содержимое ниже.

Server1
Server2
Server3

Если мы используем вышеуказанную команду, мы можем получить следующий вывод:

Server1,Server2,Server3,


[mohramak@oc3246038448 Desktop]$ cat Servers
Server1
Server2
Server3
[mohramak@oc3246038448 Desktop]$ awk '{print $1","}' Servers | tr -d '[\n]' | xargs echo 
Server1,Server2,Server3,
[mohramak@oc3246038448 Desktop]$ 
user165585
источник