Использование sed для разделения строки с разделителем

у меня есть строка в следующем формате:

string1:string2:string3:string4:string5

Я пытаюсь использовать sed разделить строку на : и распечатайте каждую подстроку в новой строке. Вот что я делаю:

cat ~/Desktop/myfile.txt | sed s/:/n/

печатается:

string1
string2:string3:string4:string5

как я могу заставить его разделить на каждом разделителе?

6 ответов


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

все вместе, в вашем случае вам нужно будет использовать:

sed 's/:/\n/g' ~/Desktop/myfile.txt

обратите внимание, что вы можете напрямую использовать sed ... file синтаксис, вместо ненужных трубопроводов: cat file | sed.


используя \n на sed - это не портативный. Портативный способ сделать то, что вы хотите с sed - это:

sed 's/:/\
/g' ~/Desktop/myfile.txt

но на самом деле это не работа для sed в любом случае, это задание tr был создан, чтобы делать:

tr ':' '
' < ~/Desktop/myfile.txt

Через просто 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

Это может сработать для вас (GNU sed):

sed 'y/:/\n/' file

или, возможно:

sed y/:/$"\n"/ file

Это должно сделать это:

cat ~/Desktop/myfile.txt | sed s/:/\n/g

Если вы используете gnu sed, то вы можете использовать \x0A для перехода на новую строку:

sed 's/:/\x0A/g' ~/Desktop/myfile.txt