Как удалить переводы строк из текстового файла? - PullRequest
82 голосов
/ 28 июня 2010

У меня есть следующие данные, и мне нужно поместить их все в одну строку.

У меня есть это:

22791

;

14336

;

22821

;

34653

;

21491

;

25522

;

33238

;

Мне нужно это:

22791;14336;22821;34653;21491;25522;33238;

РЕДАКТИРОВАТЬ

Ни одна из этих команд не работает идеально.

Большинство из них допускают такие данные:

22791

;14336

;22821

;34653

;21491

;25522

Ответы [ 18 ]

1 голос
/ 28 июня 2010
$ perl -0777 -pe 's/\n+//g' input >output
$ perl -0777 -pe 'tr/\n//d' input >output
1 голос
/ 17 апреля 2013

xargs также использует новые строки (но добавляет последний завершающий перевод):

xargs < file.txt | tr -d ' '
1 голос
/ 28 июня 2010

Использование man 1 ed:

# cf. http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed 
ed -s file <<< $'1,$j\n,p'  # print to stdout 
ed -s file <<< $'1,$j\nwq'  # in-place edit
1 голос
/ 28 июня 2010

Если данные находятся в файле file.txt, то:

echo $(<file.txt) | tr -d ' '

$(<file.txt) читает файл и выдает содержимое в виде серии слов, которые 'echo' затем повторяются с пробеломмежду ними.Затем команда 'tr' удаляет все пробелы:

22791;14336;22821;34653;21491;25522;33238;
0 голосов
/ 12 апреля 2019

Используйте sed с POSIX классами

Это удалит все строки, содержащие только пробелы (пробелы и табуляции)

sed '/^[[:space:]]*$/d'

Просто возьми то, с чем ты работаешь, и направь это на это

Пример

cat filename | sed '/^[[:space:]]*$/d'

0 голосов
/ 24 июля 2018

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

  • Открыть gedit

  • Затем Ctrl + H , затем введите в Find текстовое поле \n и Replace with пустое пространство , затем заполните флажок Regular expression и вуаля.

0 голосов
/ 11 октября 2017

Я обычно получаю этот сценарий использования, когда копирую фрагмент кода из файла и хочу вставить его в консоль, не добавляя ненужные новые строки, в итоге я сделал псевдоним bash
(я назвал его oneline если вам интересно)

xsel -b -o | tr -d '\n' | tr -s ' ' | xsel -b -i
  • xsel -b -o читает мой буфер обмена

  • tr -d '\n' удаляет новые строки

  • tr -s ' ' удаляет повторяющиеся пробелы

  • xsel -b -i возвращает это обратно в буфер обмена

после этого я бывставьте новое содержимое буфера обмена в oneline в консоли или как угодно.

0 голосов
/ 28 июня 2010

Я бы сделал это с помощью awk, например,

awk '/[0-9]+/ { a = a $0 ";" } END { print a }' file.txt

(недостатком является то, что a "накапливается" в памяти).

EDIT

Забыли про принтф! Так же

awk '/[0-9]+/ { printf "%s;", $0 }' file.txt

или, вероятно, лучше, что уже было дано в других ответах с использованием awk.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...