Подтвердить что ты не робот

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

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

string1:string2:string3:string4:string5

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

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

Отпечатки:

string1
string2:string3:string4:string5

Как я могу разбить его на каждый разделитель?

4b9b3361

Ответ 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 ':' $'\n' <<< string1:string2:string3:string4:string5
string1
string2
string3
string4
string5

Если вам действительно нужно :

$ 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