Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用sed拆分带分隔符的字符串_Linux_Bash_Sed_String Split_Tr - Fatal编程技术网

Linux 使用sed拆分带分隔符的字符串

Linux 使用sed拆分带分隔符的字符串,linux,bash,sed,string-split,tr,Linux,Bash,Sed,String Split,Tr,我有一个以下格式的字符串: 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'

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

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
g
代表
g
lobal,意味着必须在全局范围内进行替换,即对任何事件进行替换。请注意,默认值为1,如果您输入示例2,则会执行2次,以此类推

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

sed 's/:/\\n/g' ~/Desktop/myfile.txt
请注意,您可以直接使用
sed。。。文件
语法,而不是不必要的管道:
cat file | sed

这应该可以:

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

sed
中使用
\n
是不可移植的。使用
sed
实现所需功能的便携式方法是:

sed/:/\
/g'~/Desktop/myfile.txt
但实际上,这不是sed的工作,而是创建该工作的目的:

tr':“”
“<~/Desktop/myfile.txt

如果您使用的是gnu sed,则可以将
\x0A
用于换行:

sed 's/:/\x0A/g' ~/Desktop/myfile.txt
这可能适用于您(GNU-sed):

或许:

sed y/:/$"\n"/ file
简单地使用:


$tr':“$”\n该死!我是如此接近。
g
的作用是什么?我会尽快接受你的回答。谢谢它代表
global
,意味着必须在
global
范围内进行替换,也就是说,对于任何事件。请注意,默认值为1,如果您放入示例2,则会执行2次,以此类推。这在非GNU sed中不起作用。例如,您的最后一个示例是
sed$s/:/\\\n/g'file.txt
,它依靠bash格式引用来解释ANSI反斜杠符号。@ghoti谢谢,我也用这种方法更新了。在未来,随时更新帖子,使其更加正确,我们都可以从中学习!你可以考虑<代码> Tr: 'n '喜欢使用T.简单和方便的解决方案。ThanksOn iTerm,在MacOS上,可以使用
alt+enter
在输入上输入结束行字符。拆分
$PATH
变量btw的简便技巧。不一定。Win32环境将使用不同的换行符,我上次检查时,Cygwin使用gnu sed。
sed 's/:/\x0A/g' ~/Desktop/myfile.txt
sed 'y/:/\n/' file
sed y/:/$"\n"/ file
$ 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