Я хочу собрать все строки в тексте в одну строку. Я новичок в программировании, пытающийся учиться на практике. Я провел четыре часа, пытаясь решить эту проблему. Я знаю, что есть простое решение этой проблемы. Вот что я пытался
sed -e 'N;s/\n//' myfile.txt #Does nothing sed -e :a -e N -e 's/\n/ /' -e ta myfile.txt #output all messed up and I can't make head nor tail of the syntax cat myfile.txt | tr -d '\n' > myfile.txt # Deletes all lines
Вот текстовый файл:
500212 262578-4-4 23200 GRIFFITH LABORATORIES LTD GRIFFITH LABORATORIES SOUTH DUBLIN COUNTY COUNCIL OFFICE OFFICE (INDUSTRIAL) List Rateable 2 Pineview Industrial Estate Firhouse Road Knocklyon 31 Dec 2007 01 Jan 2008"
Я не могу понять, где я ошибся ....
tr
, как вы его использовали , должно работать и является самым простым - вам просто нужно вывести в другой файл . Если вы используете входной файл в качестве выходного, результатом будет пустой файл, как вы заметили;
cat myfile.txt | tr -d '\n' > oneline.txt
Вы должны помнить, что некоторые редакторы заканчивают строку с \r\n
. Для этого случая используйте
cat myfile | tr -d '\r\n'
Попробуйте это
sed -e :a -e '/$/N; s/\n/\\n/; ta' [filename]
http://anandsekar.github.io/joining-all-lines-in-a-file-using-sed/
Вот оно. Это еще одно решение, простое и легкое.
echo $(cat Input.txt) > Output.txt
Поиск и замена \n
с пространством ''.
Можно получить окно замены путем попытки 'Искать '->'Replace'
или через keybpard ярлык Ctrl+H
См. снимок экрана ниже:
Ваш оригинальный текст находится на строках 1-14.
Результат находится на строке 16.
Нет никакой потребности поместить маркировку :a
за пределами основной инструкции ни один не -e
опция, необходимая необходимый; наконец, /$/
является лишним (каждая строка имеет символ EOL).
Улучшая другие ответы, каждый добирается
sed -i ':a; N; s/\n/ /; ta' file
Который более ясен, если записано следующим образом,
sed -i ':a
N
s/\n/ /
ta' file
Команда работает следующим образом:
N
добавляет следующую строку к (многострочному) пространству шаблона, которое уже содержит текущую строку;s/\n/ /
замените символом новой строки \n
сгенерированный N
с пространством
;ta
переходит к строке сценария после маркировки :a
пока замена на шаге 2 была успешна, т.е. если замена произошла, переходы выполнения к шагу 1, не "поражая" конец сценария, т.е. не читая другую строку входа.Отметьте следующее;
sed
читает строки входного файла один за другим в порядке, начинающем с 1-й строки;:a
просто маркировка, не команда, которая будет выполняться;N
в принципе, выполняется на любой строке, ноs/\n/ /
(в принципе выполняемый на любой строке), успешно на любой строке, но последней, таким образом,ta
делает конец сценария достижимым только, когда последняя строка входа читается (единственная строка, где s
сбои), таким образом,p
команда выполняется.Таким образом, сценарий в основном читает в 1-й строке входа и продолжает добавлять следующие строки один за другим, каждый раз заменяя новой строкой с пространством; после того, как последняя строка добавляется (и \n
измененный в пространстве), N
не может добавить строку, s
сбои, ta
пропускается, конец сценария достигнут, и подразумеваемое p
оператор rint выполняется на текущем looong пространстве шаблона с 1 строкой.
-i
опция заменяет входным файлом file
с целым пространством шаблона с 1 строкой.
Я думаю, что самый простой способ сделать это:
paste -s -d:" " test.txt
ПРОСТОЙ МЕТОД
Другой метод с помощью awk,
cat myfile.txt | awk '{print}' ORS=''
Вывод:
ЛАБОРАТОРИИ 500212262578-4-423200GRIFFITH графство LTDGRIFFITH LABORATORIESSOUTH ДУБЛИН COUNCILOFFICEOFFICE (ПРОМЫШЛЕННЫЙ) Rateable2 Pineview списка промышленный декабрь EstateFirhouse RoadKnocklyon31 200 701 январь 2008"
Примечание:
ORS =''-> Это - Ваш разделитель полей, у Вас может быть любой промежуток символов одинарные кавычки как разделитель полей. Используя этот awk метод мы можем включать пробелы и все символы.
Надежда это могло бы помочь!
Я думаю, вы просто забыли, что вам нужно было сказать sed перенаправить вывод yourfile.txt на нужный результат, newfile.txt. Похоже, эта команда вам нужна, но только если файлы, которые вы пытаетесь объединить, не слишком велики для буферов sed: sed -e :a -e N -e 's/\n/ /' -e ta yourfile.txt >newfile.txt
. Благодарим другой форум здесь , где они обсуждают возможности sed. Я проверил команду, и она сработала для меня.
Чистое решение для bash:
while read i; do printf '%s ' "$i"; done < file.txt > outfile.txt
Если бы это был я, я бы просто открыл его в vim и нажал несколько раз Shift kbd> + J kbd>.
vim <your_file>
Введите в vim и нажмите Enter:
:% s/\n/ /g
Подход Python:
python -c "import sys; print(' '.join([ l.strip() for l in sys.stdin.readlines() ]))" < input.txt
AWK:
awk '{printf "%s ",$0}' /etc/passwd