使用sed分割带分隔符的字符串

hax*_*ode 46 linux bash sed string-split

我有一个以下格式的字符串:

string1:string2:string3:string4:string5

我正在尝试使用sed分割字符串:并在新行上打印每个子字符串.这是我正在做的事情:

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

这打印:

string1
string2:string3:string4:string5
Run Code Online (Sandbox Code Playgroud)

如何在每个分隔符上拆分它?

fed*_*qui 60

要使用GNU sed分隔带分隔符的字符串,您可以说:

sed 's/delimiter/\n/g'     # GNU sed
Run Code Online (Sandbox Code Playgroud)

例如,要使用:分隔符进行拆分:

$ sed 's/:/\n/g' <<< "he:llo:you"
he
llo
you
Run Code Online (Sandbox Code Playgroud)

或者使用非GNU sed:

$ sed $'s/:/\\\n/g' <<< "he:llo:you"
he
llo
you
Run Code Online (Sandbox Code Playgroud)

在这种特殊情况下,您g在替换后错过了.因此,它只做了一次.看到:

$ echo "string1:string2:string3:string4:string5" | sed s/:/\\n/g
string1
string2
string3
string4
string5
Run Code Online (Sandbox Code Playgroud)

g代表g全球,意味着必须在全球范围内进行替换,即任何事件.看到默认值是1,如果你举两个例子,它就会完成2次,等等.

总而言之,在您的情况下,您需要使用:

sed 's/:/\\n/g' ~/Desktop/myfile.txt
Run Code Online (Sandbox Code Playgroud)

请注意,您可以直接使用sed ... file语法,而不是不必要的管道:cat file | sed.


Ed *_*ton 28

使用\nin sed是不可移植的.随心所欲的方式sed是:

sed 's/:/\
/g' ~/Desktop/myfile.txt
Run Code Online (Sandbox Code Playgroud)

但实际上,这不是一项工作sed,而是tr创造了这样的工作:

tr ':' '
' < ~/Desktop/myfile.txt
Run Code Online (Sandbox Code Playgroud)


Gil*_*not 23

简单地使用:

$ tr ':' $'\n' <<< string1:string2:string3:string4:string5
string1
string2
string3
string4
string5
Run Code Online (Sandbox Code Playgroud)

如果你真的需要:

$ sed 's/:/\n/g' <<< string1:string2:string3:string4:string5
string1
string2
string3
string4
string5
Run Code Online (Sandbox Code Playgroud)