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:
$ tr ':' $'\n' <<< string1:string2:string3:string4:string5
string1
string2
string3
string4
string5
Run Code Online (Sandbox Code Playgroud)
如果你真的需要sed:
$ sed 's/:/\n/g' <<< string1:string2:string3:string4:string5
string1
string2
string3
string4
string5
Run Code Online (Sandbox Code Playgroud)