Использование sed для разделения строки с разделителем
У меня есть строка в следующем формате:
string1:string2:string3:string4:string5
Я пытаюсь использовать sed
для разделения строки на :
и печатать каждую подстроку в новой строке. Вот что я делаю:
cat ~/Desktop/myfile.txt | sed s/:/\\n/
Отпечатки:
string1
string2:string3:string4:string5
Как я могу разбить его на каждый разделитель?
Ответы
Ответ 1
Чтобы разделить строку с разделителем с помощью sed, вы скажете:
sed 's/delimiter/\n/g'
Например, для разделения с помощью :
в качестве разделителя:
$ sed 's/:/\n/g' <<< "he:llo:you"
he
llo
you
В этом конкретном случае вы пропустили g
после замены. Следовательно, это делается только один раз. См:
$ echo "string1:string2:string3:string4:string5" | sed s/:/\\n/g
string1
string2
string3
string4
string5
g
означает g
lobal и означает, что подстановка должна выполняться глобально, то есть для любого случая. Посмотрите, что по умолчанию 1, и если вы положили пример 2, это делается 2 раза и т.д.
Все вместе, в вашем случае вам нужно будет использовать:
sed 's/:/\\n/g' ~/Desktop/myfile.txt
Обратите внимание, что вы можете напрямую использовать синтаксис sed ... file
вместо ненужного трубопровода: cat file | sed
.
Ответ 2
Использование \n
в sed
не переносимо. Портативный способ сделать то, что вы хотите, с помощью sed
:
sed 's/:/\
/g' ~/Desktop/myfile.txt
но на самом деле это не работа для sed
в любом случае, для этого было создано задание tr
:
tr ':' '
' < ~/Desktop/myfile.txt
Ответ 3
Использование просто tr:
$ tr ':' $'\n' <<< string1:string2:string3:string4:string5
string1
string2
string3
string4
string5
Если вам действительно нужно sed:
$ sed 's/:/\n/g' <<< string1:string2:string3:string4:string5
string1
string2
string3
string4
string5
Ответ 4
Это может сработать для вас (GNU sed):
sed 'y/:/\n/' file
или, возможно:
sed y/:/$"\n"/ file
Ответ 5
Это должно сделать это:
cat ~/Desktop/myfile.txt | sed s/:/\\n/g
Ответ 6
Если вы используете gnu sed, вы можете использовать \x0A
для новой строки:
sed 's/:/\x0A/g' ~/Desktop/myfile.txt