2009-10-24 7 views
11

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

hi 
hello 
hallo 
greetings 
salutations 
no more hello for you 

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

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

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

Не могли бы вы помочь? Я ищу решение в sed/awk.

ответ

11

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

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

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

tr "\n" "\t" < newlines 

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

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

+1

+1 Ударьте меня на 40 секунд – Nifle

+0

@Nifle: Также нет 'cat' здесь, но кто подсчитывает? :) – Telemachus

+0

Можете отметить, что «новые строки» - это текстовый файл. – Nifle

5

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

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

Не могли бы вы также объяснить, какую команду вы используете? – Vijay

+0

Если это не последняя строка, подключите следующую строку к пробелу шаблона, замените новую строку и затем ответьте на: a и сделайте то же самое для каждой строки – ghostdog74

1
paste -s 

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

0

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

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

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

Смежные вопросы