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

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

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

22791

;

14336

;

22821

;

34653

;

21491

;

25522

;

33238

;

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

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

ИЗМЕНИТЬ

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

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

22791

;14336

;22821

;34653

;21491

;25522

Ответ 1

tr -d '\n' < yourfile.txt

Edit:

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

Try:

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

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

Ответ 2

perl -p -i -e 's/\R//g;' filename

Требуется выполнить работу.

Ответ 3

paste -sd "" file.txt

Ответ 4

tr -d '\n' < file.txt

или

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

или

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

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

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

Ответ 5

использовать

head -n 1 filename | od -c 

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

tr -d '\n' <filename

для LF

tr -d '\r\n' <filename

для CRLF

Ответ 6

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

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

Ответ 7

Nerd fact: вместо этого используйте ASCII.

tr -d '\012' < filename.extension   

(Отредактированная причина: я не видел ответ friggin, у которого было такое же решение, только разница заключалась в том, что у меня был ASCII)

Ответ 8

$ perl -0777 -pe 's/\n+//g' input >output
$ perl -0777 -pe 'tr/\n//d' input >output

Ответ 9

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

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

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

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

Ответ 10

Использование 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

Ответ 11

xargs также потребляет новые строки (но добавляет конечную конечную новую строку):

xargs < file.txt | tr -d ' '

Ответ 12

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

$ tr -cd ";0-9"

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

Ответ 13

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

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

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

Ответ 14

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

99gJ

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

Ответ 15

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

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

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

ИЗМЕНИТЬ

Забыл о printf! Итак,

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

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

Ответ 16

Обычно я получаю этот usecase, когда я копирую фрагмент кода из файла, и я хочу вставить его в консоль, не добавляя лишних новых строк, я закончил создание псевдонима 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 в консоли или что-то еще.

Ответ 17

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

  • Открыть gedit

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

Ответ 18

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

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

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

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

пример

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