it-swarm.com.ru

Как удалить переводы строк из текстового файла?

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

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

22791

;

14336

;

22821

;

34653

;

21491

;

25522

;

33238

;

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

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

Правка

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

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

22791

;14336

;22821

;34653

;21491

;25522
78
Alucard
tr -d '\n' < yourfile.txt

Правка:

Если ни одна из команд, размещенных здесь, не работает, то у вас есть что-то кроме новой строки, разделяющей ваши поля. Возможно, в файле есть окончания строк DOS/Windows (хотя я ожидаю, что решения Perl будут работать даже в этом случае)? 

Пытаться:

tr -d "\n\r" < yourfile.txt

Если это не сработает, вам придется более внимательно изучить ваш файл (например, в шестнадцатеричном редакторе), чтобы выяснить, какие символы на самом деле там, и которые вы хотите удалить.

173
Tyler McHenry
Perl -p -i -e 's/\R//g;' filename

Должен делать работу.

8
ZyX
paste -sd "" file.txt
6
Amardeep AC9MF

использование 

head -n 1 filename | od -c 

чтобы выяснить, ЧТО является оскорбительным символом . затем используйте 

tr -d '\n' <filename

для НЧ

tr -d '\r\n' <filename

для CRLF

4
MrE
tr -d '\n' < file.txt

Или же

awk '{ printf "%s", $0 }' file.txt

Или же

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

На этой странице здесь есть множество других методов для удаления новых строк.

отредактировано для удаления злоупотребления кошачьими :)

4
Vivin Paliath

Вы можете редактировать файл в vim:

$ vim inputfile
:%s/\n//g
4
loganaayahee

Глупый факт: используйте вместо этого ASCII.

tr -d '\012' < filename.extension   

(Отредактировано, потому что я не видел чертов ответ ', который имел такое же решение, единственное отличие было в том, что у моего был ASCII)

2
Byfjunarn

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

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

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

22791;14336;22821;34653;21491;25522;33238;
1
Jonathan Leffler

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

xargs < file.txt | tr -d ' '
1
marky

Использование текстового редактора gedit (3.18.3)

  1. Нажмите Поиск
  2. Нажмите Найти и заменить ...
  3. Введите \n\s в Найти поле
  4. Оставить Заменить на пробел (ничего)
  5. Check Регулярное выражение box
  6. Нажмите кнопку Найти

Примечание: это точно не решает исходную 7-летнюю проблему ОП, но должно помочь некоторым пользователям noob linux (таким как я), которые находят свой путь сюда из SE с похожими вопросами «как мне получить текст в одной строке» ,.

1
Hastig Zusammenstellen

Сегодня у вас был такой же случай, супер просто в vim или nvim, вы можете использовать gJ для объединения строк. Для вашего случая использования просто сделайте 

99gJ

это объединит все ваши 99 линий. Вы можете настроить число 99 по мере необходимости в зависимости от количества строк, чтобы присоединиться. Если просто присоединиться к 1 строке, то достаточно только gJ.

1
Leon li

Используя 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
carlmund

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

$ tr -cd ";0-9"

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

1
peak
$ Perl -0777 -pe 's/\ n + // g' input> output
$ Perl -0777 -pe 'tr/\ n // d' input> output
0
Greg Bacon

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

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

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

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

Пример

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

0
jasonleonhard

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

  • Откройте gedit

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

0
Eduard Florinescu

Я обычно получаю этот сценарий использования, когда копирую фрагмент кода из файла и хочу вставить его в консоль, не добавляя ненужные новые строки, в итоге я создал псевдоним 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
Mohammad AbuShady

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

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

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

Правка

Забыли про принтф! Поэтому также

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

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

0
ShinTakezou