Как заменить символы новой строки символами табуляции? - PullRequest
12 голосов
/ 24 октября 2009

У меня есть шаблон, как показано ниже

hi
hello
hallo
greetings
salutations
no more hello for you

Я пытаюсь заменить все символы новой строки на вкладке с помощью следующей команды

sed -e "s_/\n_/\t_g"

но это не работает.

Может ли кто-нибудь помочь, пожалуйста? Я ищу решение в sed / awk.

Ответы [ 6 ]

39 голосов
/ 24 октября 2009

Здесь tr лучше, я думаю:

tr "\n" "\t" < newlines 

Как предложил Nifle в комментарии, newlines здесь - имя файла, содержащего оригинальный текст.

Поскольку sed ориентирован на строки, в таком случае его сложнее использовать.

12 голосов
/ 24 октября 2009

не уверен в желаемом выводе

# awk -vRS="\n" -vORS="\t" '1' file
hi      hello   hallo   greetings       salutations     no more hello for you 
9 голосов
/ 24 марта 2010
sed '$!{:a;N;s/\n/\t/;ta}' file
6 голосов
/ 24 октября 2009

Вы не можете заменять символы новой строки построчно на sed. Вы должны накапливать строки и заменять новые строки между их.

text abc\n    <- can't replace this one

text abc\ntext def\n    <- you can replace the one after "abc" but not the one at the end

Этот скрипт sed накапливает все строки и удаляет все новые строки, кроме последнего:

sed -n '1{x;d};${H;x;s/\n/\t/g;p};{H}'

Кстати, ваш sed скрипт sed -e "s_/\n_/\t_g" пытается сказать "заменить все слэши, за которыми следуют символы новой строки, на косые черты с последующими вкладками". Подчеркивания играют роль разделителей для команды s, так что косые черты можно легче использовать в качестве символов для поиска и замены.

2 голосов
/ 02 июля 2017
paste -s

-s Объединить все строки каждого отдельного входного файла в порядок командной строки. Символ новой строки каждой строки кроме последней строки в каждом входном файле заменяется символ табуляции, если не указано иное параметром -d.

0 голосов
/ 12 января 2018

Вы почти там со своим сценарием sed, вам просто нужно изменить его на:

sed -e "s/\n/\t/g"

\ достаточно для побега, вам не нужно добавлять _ И вам нужно добавить / перед g в конце, чтобы sed знал, что это последняя часть скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...