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

StackOverflow https://stackoverflow.com/questions/1617724

  •  06-07-2019
  •  | 
  •  

Вопрос

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

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 собирает все строки и удаляет все новые строки, кроме последнего:

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

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

paste -s

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top