Использование 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
Если вы используете gnu sed, то вы можете использовать \x0A
для перехода на новую строку:
sed 's/:/\x0A/g' ~/Desktop/myfile.txt