2010-10-04 65 views
0

UNIX sed命令我尝试用一​​个换行符\n替换字符#为逃脱的字符

sed -e "s/#/\n/g" > file.txt 

能正常工作。

现在有与焦炭#,当逃脱-问题:

例如:123#456-#789#777应该是:
456#789

转义字符-本身也可以被转义: 如:123#456-#789--012#777应该是:
456#789-012

我该怎么用sed做这个?

回答

1
$ echo "123#456-#789#777" | sed 's/\([^-]\)#/\1\n/g;s/-\(.\)/\1/g' 
123 
456#789 
777 

$ echo "123#456-#789--012#777" | sed 's/\([^-]\)#/\1\n/g;s/-\(.\)/\1/g' 
123 
456#789-012 
777 

$ echo "#123#456-#789#777" | sed 's/\(^\|[^-]\)#/\1\n/g;s/-\(.\)/\1/g' 

123 
456#789 
777 

$ echo "#1###2-#3--4#5#" | sed "s/\([^-]\)##/\1#\n/g;s/\(^\|[^-]\)#/\1\n/g;s/-\(.\)/\1/g" 

1 


2#3-4 
5 

$ 

第一部分是保留-<any chars>和转换#(不包括前面的-)来换行,第二部分是-<any chars>转换为只<any chars>(如果你不需要这样的通配符,我想你知道如何只修改-#。)

+0

怎么回声“#123#456-#789#777”| sed's/\\([^ - ] \\)#/ \ 1 \ n/g; s/- \\(。\\)/ \ 1/g' – gert 2010-10-04 11:16:47

+0

@newGuest, 123' ?然后sed's/\\(^ \ | [^ - ] \\)#/ \ 1 \ n/g; s/- \\(。\\)/ \ 1/g'就是您想要的。 – livibetter 2010-10-04 11:21:25

+0

新行可以在那里 - 但这不工作:echo“1 ## 2#3”| sed“s/\\(^ \ | [^ - ] \\)#/ \ 1 \ n/g; s/- \\(。\\)/ \ 1/g” – gert 2010-10-04 11:29:07

0

sed -e“s /([^ - ])#/ \ 1 \ n/g; s/-/-/g; s/- #/#/ g “

这只是逃避 - 和 - #虽然。

0
$ echo "123#456-#789--012#777" | awk -F"#" '{print $1;for(i=2;i<NF-1;i++){printf "%s#",$i};print $(NF-1);print $NF}' 
123 
456-#789--012 
777 
$ echo "123#456-#789#777" | awk -F"#" '{print $1;for(i=2;i<NF-1;i++){printf "%s#",$i};print $(NF-1);print $NF}' 
123 
456-#789 
777