команда unix sed для экранированных символов - PullRequest
0 голосов
/ 04 октября 2010

Я пытаюсь заменить char # на новую строку \n:

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

, это работает нормально.

Теперь есть проблема с char #, когдаэкранируется с -:

например: 123 # 456- # 789 # 777 должно быть:123456 # 789777

Сам экранированный символ - также может быть экранирован: например: 123 # 456- # 789--012 # 777 должно быть:123456 # 789-012777

Как я могу сделать это с помощью sed?

Ответы [ 3 ]

1 голос
/ 04 октября 2010
$ 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 голосов
/ 04 октября 2010
$ 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
0 голосов
/ 04 октября 2010

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

Это толькоубегает - и - # хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...