sed + заменить слово в каталоге PATH - PullRequest
0 голосов
/ 04 июля 2010

Как заменить

<x>

со словом Before_last_dir только для каталога, который находится перед последним каталогом (согласно этому примеру - dir4)

 echo "/dir1/dir2/dir3<x>/dir4<x>/dir5<x>" |sed s"/<x>/Before_last_dir/g"

Другой пример

echo "/dirA<x>/dirB<x>/dirC<x> >" |sed s"/<x>/Before_last_dir/g" 

должно быть

/dirA<x>/dirBBefore_last_dir/dirC<x>

1 Ответ

1 голос
/ 04 июля 2010
$ echo "/dir1/dir2/dir3<x>/dir4<x>/dir5<x>" | sed -E "s/<x>(\/[^\/]+)$/Before_last_dir\1/g"
/dir1/dir2/dir3<x>/dir4Before_last_dir/dir5<x>

(- E означает, что sed использует расширенные регулярные выражения POSIX)

В качестве альтернативы, без -E (так как -E может быть недоступно в некоторых системах):

$ echo "/dir1/dir2/dir3<x>/dir4<x>/dir5<x>" | sed "s/<x>\(\/[^\/]\{1,\}\)$/Before_last_dir\1/"
/dir1/dir2/dir3<x>/dir4Before_last_dir/dir5<x>

Это должно работать везде. (РЕДАКТИРОВАТЬ: изменил оператор "+" на POSIX "{1,}", поскольку "+" является расширением GNU, а не в POSIX.

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