Ответ 1
не уверен, что вы хотите
# awk -vRS="\n" -vORS="\t" '1' file
hi hello hallo greetings salutations no more hello for you
У меня есть шаблон, как показано ниже
hi
hello
hallo
greetings
salutations
no more hello for you
Я пытаюсь заменить все новые строки на вкладку, используя следующую команду
sed -e "s_/\n_/\t_g"
но он не работает.
Может ли кто-нибудь помочь? Я ищу решение в sed/awk.
не уверен, что вы хотите
# awk -vRS="\n" -vORS="\t" '1' file
hi hello hallo greetings salutations no more hello for you
Здесь tr
лучше, я думаю:
tr "\n" "\t" < newlines
Как показано в комментарии Nifle, newlines
здесь указано имя файла, содержащего исходный текст.
Поскольку sed
является таким ориентированным на линию, его сложнее использовать в таком случае.
sed '$!{:a;N;s/\n/\t/;ta}' file
Вы не можете заменять строки новой строки по очереди 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
, так что слэши могут быть более легко использованы в качестве символов для поиска и замены.
paste -s
-s Объединить все строки каждого отдельного входного файла в порядок командной строки. Новый символ каждой строки кроме последней строки в каждом входном файле, заменяется символ табуляции, если не указано иное параметром -d.
Вы почти со своим sed script, вам просто нужно изменить его на:
sed -e "s/\n/\t/g"
Для escape-кода достаточно \
, вам не нужно добавлять _
И вам нужно добавить /
до g
в конце, чтобы сообщить sed, что это последняя часть script.