У текстовому файлі замініть всі пробіли комами


10

Мені потрібно замінити всі пробіли всередині мого тексту комами. Зараз я використовую цей рядок, але він не працює: я отримую як вихід текстовий файл, який точно такий же, як і вихідний:

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

Дякую


sed 's / [[: blank:]] \ + /, / g'
mug896

@ mug896 працював на мені на Ubuntu 18.04. Мені потрібні були подвійні квадратні дужки та \ до +
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 зараз це робить. Вона sed команда ви написали, вона все ще не працює.
аневризм

Вибачте, що вам потрібно вийти з +оператора в sed, я щойно оновив свою відповідь. Нові рядки - це білий на перламутрі, тому вам доведеться робити вручну клас, якщо ви не хочете включити його. Для цього я додав два рішення.
Калеб

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]$ 
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.