2010-06-28 2 views
66

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

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

22791 

; 

14336 

; 

22821 

; 

34653 

; 

21491 

; 

25522 

; 

33238 

; 

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

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

EDIT

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

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

22791 

;14336 

;22821 

;34653 

;21491 

;25522 
+11

Скопируйте пасту в адресную строку браузера или в другое текстовое поле. Quick'n'dirty, но работает для небольших объемов данных. – ignis

ответ

141
tr -d '\n' < yourfile.txt 

Edit:

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

Try:

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

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

+0

Это последнее работает! спасибо ... Эти данные взяты из файла журнала apache! ... На самом деле я не знаю, была ли она создана на Windows ... учитель моего uni дал мне сделать домашнее задание! – Alucard

+17

Я надеюсь, что удаление этих строк не было вашей реальной домашней работой! –

+1

Второй с \ r работал для меня! – techblu3

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

Или

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

Или

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

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

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

+2

Правильное, но кошачье злоупотребление. –

+0

Никогда не слышал этого срока раньше. Спасибо, что указали это :) –

0
$ perl -0777 -pe 's/\n+//g' input >output
$ perl -0777 -pe 'tr/\n//d' input >output
6
paste -sd "" file.txt 
+1

В Solaris (10) 'paste -sd" "' по умолчанию не работает в STDIN, поэтому, если вы подключаетесь к нему, используйте: '(некоторая команда) | paste -sd "" -' – JohnGH

+0

Это не работает, если вы также хотите удалить * final * новую строку. Он удаляет только промежуточные строки. – josch

+0

Насколько я знаю, использование 'paste -sd '\ 0'' более переносимо ... – Sundeep

0

Я хотел бы сделать это с AWK, например,

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

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

EDIT

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

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

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

1

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

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

«$(<file.txt)» считывает файл и выдает содержимое в виде последовательности слов, которые «эхо», то перекликается с пространством между ними. Команда 'тр' удаляет все пробелы:

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

Это работает до тех пор, пока вход не слишком велик, и пока вы используете Bash (помечены для Bash, поэтому ничего страшного). Если бы я написал ответ сейчас, это будет 'tr -d '\ n'

1

Использование человеку 1-е изд:

# 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 
6
perl -p -i -e 's/\R//g;' filename 

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

1

xargs потребляет новой строки, а также (но добавляет окончательный символ новой строки):

xargs < file.txt | tr -d ' ' 
3

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

head -n 1 filename | od -c 

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

tr -d '\n' <filename 

для LF

tr -d '\r\n' <filename 

для CRLF

2

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

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

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

$ tr -cd ";0-9" 

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

1

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

tr -d '\012' < filename.extension 

(ред причины я не видел чертов ответа, который имел такое же решение, только разница в том, что шахта была ASCII)

0

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

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

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

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

  • xsel -b -i толкает это назад в мой буфер обмена

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

1

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

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

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

Смежные вопросы