Замените символ новой строки запятой и пробелом, чтобы получить вывод в 1 строку - PullRequest
1 голос
/ 03 июля 2019

Пример файла

[user@linux ~]$ cat ip.txt
10.1.1.1
10.1.1.2
10.1.1.3
[user@linux ~]$

1-я попытка с 1 пробелом после ,

[user@linux ~]$ tr '\n' ', ' < ip.txt
10.1.1.1,10.1.1.2,10.1.1.3,[user@linux ~]$

2-я попытка с 1 пробелом до и после ,

[user@linux ~]$ tr '\n' ' , ' < ip.txt
10.1.1.1 10.1.1.2 10.1.1.3 [user@linux ~]$
[user@linux ~]$

3-я попытка с 1 пробелом перед ,, также производящая тот же результат, что и 2-я попытка

[user@linux ~]$ tr '\n' ' ,' < ip.txt
10.1.1.1 10.1.1.2 10.1.1.3 [user@linux ~]$
[user@linux ~]$

Обновление

sed ничего не меняет

[user@linux ~]$ sed 's/\n/, /g' ip.txt
10.1.1.1
10.1.1.2
10.1.1.3
[user@linux ~]$

В то время как perl вывод похож на попытку 2 & 3

[user@linux ~]$ perl -pe 's/\n/ /g' ip.txt
10.1.1.1 10.1.1.2 10.1.1.3 [user@linux ~]$

Желаемый выход

1 пробел после , в одной строке, как это ...

10.1.1.1, 10.1.1.2, 10.1.1.3

Ответы [ 2 ]

1 голос
/ 03 июля 2019

tr можно использовать для замены только одного символа одним.

Вы не можете заменить двумя символами.

Вы можете искать с помощью sed или awk

1 голос
/ 03 июля 2019

Я считаю, что tr может заменить только один символ другим, и его нельзя использовать для вставки большего количества символов.Попробуйте это с

sed ':a;N;$!ba;s/\n/, /g' ip.txt

или

perl -pe 's/\n/, /g' ip.txt

Если вы хотите экранировать последнюю запятую, тогда

sed ':a;N;$!ba;s/\n/, /g' ip.txt | sed 's/\n$//g'
...