我尝试用换行符#
替换字符\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做到这一点?
答案 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