unix sed命令用于转义字符

时间:2010-10-04 10:39:22

标签: unix sed

我尝试用换行符#替换字符\n

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

这很好。

现在,使用#转义时,-字符存在问题:

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

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

我怎么能用sed做到这一点?

3 个答案:

答案 0 :(得分: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> (如果您不需要这样的通配符,我想您知道如何仅对-#进行修改。)

答案 1 :(得分:0)

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

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

答案 2 :(得分: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