我有以下格式的字符串:
string1:string2:string3:string4:string5
我正在尝试使用sed
拆分字符串:
并将每个子字符串打印在新行上。这是我正在做的事情:
cat ~/Desktop/myfile.txt | sed s/:/\\n/
这打印:
string1
string2:string3:string4:string5
我怎样才能让它在每个分隔符上拆分?
我有以下格式的字符串:
string1:string2:string3:string4:string5
我正在尝试使用sed
拆分字符串:
并将每个子字符串打印在新行上。这是我正在做的事情:
cat ~/Desktop/myfile.txt | sed s/:/\\n/
这打印:
string1
string2:string3:string4:string5
我怎样才能让它在每个分隔符上拆分?
要使用 GNU sed 使用分隔符拆分字符串,您可以说:
sed 's/delimiter/\n/g' # GNU sed
例如,使用:
分隔符进行拆分:
$ sed 's/:/\n/g' <<< "he:llo:you"
he
llo
you
或者使用非 GNU sed:
$ 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
.
使用\n
insed
是不可移植的。做你想做的事的便携方式sed
是:
sed 's/:/\
/g' ~/Desktop/myfile.txt
但实际上这sed
无论如何都不是一份工作,而是tr
创建这项工作:
tr ':' '
' < ~/Desktop/myfile.txt
这可能对您有用(GNU sed):
sed 'y/:/\n/' file
也许:
sed y/:/$"\n"/ file
如果您使用的是 gnu sed,那么您可以使用\x0A
换行符:
sed 's/:/\x0A/g' ~/Desktop/myfile.txt
这应该这样做:
cat ~/Desktop/myfile.txt | sed s/:/\\n/g