Как удалить строки из текстового файла?
У меня есть следующие данные, и мне нужно поместить все это в одну строку.
У меня есть это:
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)
- Нажмите Поиск
- Нажмите Найти и заменить...
- Введите
\n\s
в поле поиска - Оставьте Заменить на пустое (ничего)
- Установите флажок Регулярное выражение
- Нажмите кнопку Найти
Примечание: это точно не решает оригинальную 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
Вы упускаете самый очевидный и быстрый ответ, особенно когда вам нужно сделать это в графическом интерфейсе, чтобы исправить некоторые странные переносы слов.
Ответ 18
Это удалит все строки, содержащие только пробелы (пробелы и табуляции)
sed '/^[[:space:]]*$/d'
Просто возьми то, с чем ты работаешь, и направь это на это.
пример
cat filename | sed '/^[[:space:]]*$/d'