Как заменить символы новой строки на символы табуляции?

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

hi
hello
hallo
greetings
salutations
no more hello for you

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

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

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

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

Ответ 1

не уверен, что вы хотите

# awk -vRS="\n" -vORS="\t" '1' file
hi      hello   hallo   greetings       salutations     no more hello for you 

Ответ 2

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

tr "\n" "\t" < newlines 

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

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

Ответ 3

sed '$!{:a;N;s/\n/\t/;ta}' file

Ответ 4

Вы не можете заменять строки новой строки по очереди 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 script накапливает все строки и исключает все новые строки, кроме последнего:

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

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

Ответ 5

paste -s

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

Ответ 6

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

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

Для escape-кода достаточно \, вам не нужно добавлять _ И вам нужно добавить / до g в конце, чтобы сообщить sed, что это последняя часть script.