Як видалити нові рядки з текстового файлу?


116

У мене є такі дані, і мені потрібно все це скласти в один рядок.

У мене це:

22791

;

14336

;

22821

;

34653

;

21491

;

25522

;

33238

;

Мені потрібно це:

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

EDIT

Жодна з цих команд не працює ідеально.

Більшість з них нехай дані виглядають так:

22791

;14336

;22821

;34653

;21491

;25522

15
Скопіюйте та вставте в адресний рядок браузера або інше текстове поле. Quick'n'dirty, але працює для невеликої кількості даних.
ignis

Відповіді:


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

Редагувати:

Якщо жодна з команд, розміщених тут, не працює, то у вас є щось інше, ніж новий рядок, що розділяє ваші поля. Можливо, у файлі є закінчення рядків DOS / Windows (хоча я б очікував, що рішення Perl будуть працювати навіть у такому випадку)?

Спробуйте:

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

Якщо це не працює, то вам доведеться більш уважно ознайомитись з файлом (наприклад, у шестигранному редакторі), щоб дізнатися, які символи є насправді там, які ви хочете видалити.


7
Як ви записуєте цей вихід у той же чи інший файл?
Goldname

3
Думаю tr, не підходить для порожніх рядків. Що ти думаєш? - - Я думаю sed, що найкращий варіант, як описано тут, stackoverflow.com/q/16414410/54964
Léo Léopold Hertz

Для маршрутизації виводу в інший файл просто використовуйте переадресацію виводу. Для маршрутизації до одного і того ж файлу передайте його на «губку» (доступний у пакеті «moreutils» для базових систем Debian).
підключення

Щоб записати вихід у один і той же файл, використовуйте echo -n $(tr -d "\n" < yourfile.txt) > yourfile.txt
підзаголовок


9
paste -sd "" file.txt

1
On Solaris (10) paste -sd ""за замовчуванням не працює на STDIN, тому якщо ви працюєте з ним, використовуйте: (some command) | paste -sd "" -
JohnGH

Це не працює, якщо ви також хочете видалити остаточний новий рядок. Він видаляє лише проміжні нові рядки.
Джош

Це не спрацювало на Mac OS, версія Sundeep. paste -sd'\0' -
Трентон

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

Або

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

Або

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

Ця сторінка тут є купа інших способів видалення перекладів рядків.

відредаговано, щоб видалити зловживання котячих :)


4

використання

head -n 1 filename | od -c 

з'ясувати, ЩО є ображеним персонажем. потім використовуйте

tr -d '\n' <filename

для НЧ

tr -d '\r\n' <filename

для CRLF



2

Використання 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

2

Nerd факт: замість цього використовуйте ASCII.

tr -d '\012' < filename.extension   

(Відредагована причина, я не бачив відповіді friggin, яка мала таке ж рішення, лише різниця полягала в тому, що у мене була ASCII)


2

Використовуйте sed з класами POSIX

Це видалить усі рядки, що містять лише пробіли (пробіли та вкладки)

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

Просто візьміть все, з чим працюєте, і підключіть до цього

Приклад

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


sed -i '/ ^ [[: space:]] * $ / d' ім'я файлу ... для редагування на місці; відповідь, як зазначено вище, виведе на екран
BradChesney79


1

Якщо дані є у file.txt, то:

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

'$(<file.txt) ' Читає файл і надає вміст у вигляді серії слів, які 'відлуння' потім перегукуються з пробілом між ними. Потім команда 'tr' видаляє будь-які пробіли:

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

Це працює до тих пір, поки введення не надто велике і поки ви використовуєте Bash (позначено Bash, значить, це нормально). Якби я писав відповідь зараз, це було б tr -d '\n' < file.txt, що саме робить прийнята відповідь (і я здивований, що не написав її на той час). Це, мабуть, було просто написано, щоб показати "ще один спосіб зробити це".
Джонатан Леффлер

1

xargs також споживає нові рядки (але додає остаточний останній рядок):

xargs < file.txt | tr -d ' '

1

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

$ tr -cd ";0-9"

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


1

Використання редактора тексту gedit (3.18.3)

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

Примітка: це не точно вирішує оригінальну проблему 7-річної оперативної програми, але це повинно допомогти деяким користувачам Linux Linux (як я), які знаходять свій шлях тут від SE, з подібними питаннями "як я можу текст в один рядок" .


1

Якщо у вас був той самий випадок сьогодні, супер легко в vim або nvim, ви можете використовувати gJдля приєднання рядків. Для вашого випадку використання, просто зробіть

99gJ

це приєднається до всіх ваших 99 рядків. Ви можете налаштувати число 99за потребою відповідно до того, скільки рядків потрібно приєднати. Якщо просто приєднатися до 1 рядка, то тільки gJце досить добре.


0

Я зробив би це з awk, напр

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

(недоліком є ​​те, що a "накопичується" в пам'яті).

EDIT

Забув про printf! Так само

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

або, мабуть, краще, що вже було дано в інших анс за допомогою awk.


0

Зазвичай я користуюся цією скринькою, коли я копіюю фрагмент коду з файлу, і я хочу вставити його в консоль, не додаючи зайвих нових рядків, і в кінцевому підсумку роблю псевдонім bash
(я назвав його, onelineякщо вам цікаво)

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

  • tr -d '\n' видаляє нові лінії

  • tr -s ' ' видаляє повторювані пробіли

  • xsel -b -i відсуває це назад до мого буфера обміну

після цього я вставив би новий вміст буфера обміну в один рядок у консолі чи будь-що інше.


0

Вам не вистачає найбільш очевидної та швидкої відповіді, особливо коли вам потрібно це зробити в графічному інтерфейсі, щоб виправити якесь дивне обговорення слів.

  • відчинено gedit

  • Потім Ctrl+ H, потім поставте в Findтекстове поле \nі в Replace withпорожнє місце потім заповніть прапорець Regular expressionі вуаля.


0

Щоб також видалити останній рядок у кінці файлу

python -c "s=open('filename','r').read();open('filename', 'w').write(s.replace('\n',''))"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.