Ищите и заменяйте на sed при наличии точек и подчеркиваний - PullRequest
23 голосов
/ 25 мая 2011

Как мне заменить foo.с foo_ с sed просто работает

sed 's/foo./foo_/g' file.php

не работает.Спасибо!

Ответы [ 5 ]

23 голосов
/ 25 мая 2011

Побег .:

sed 's/foo\./foo_/g' file.php

Пример:

~$ cat test.txt 
foo.bar
~$ sed 's/foo\./foo_/g' test.txt 
foo_bar
12 голосов
/ 23 августа 2011

Интересно, что если вы хотите найти и заменить только точку, вы должны поставить точку в наборе символов.По какой-то причине избежать одной только точки в команде sed не получается.Точка по-прежнему расширяется до односимвольного символа.

$ bash --version  # Ubuntu Lucid (10.04)

GNU bash, версия 4.1.5 (1) -релиз (x86_64-pc-linux-gnu)

$ echo aa.bb.cc | sed s/\./-/g  # replaces all characters with dash

'--------'

$ echo aa.bb.cc | sed s/[.]/-/g  # replaces the dots with a dash

aa-bb-cc

С добавлением ведущих символов в поиске, escape работает.

$ echo foo. | sed s/foo\./foo_/g  # works

foo_

Размещение точки в наборе символов, конечно, также работает.

$ echo foo. | sed s/foo[.]/foo_/g  # also works

foo_

- Пол

6 голосов
/ 25 мая 2011

Побег точка с \

sed 's/foo\./foo_/g' file.php

Если вы нашли комбинацию / и \ запутанную, вы можете использовать другой символ «разделитель»

sed 's#foo\.#foo_#g

2-ой символ после s может быть любым, и sed будет использовать этот символ в качестве разделителя.

3 голосов
/ 25 мая 2011

Вам нужно экранировать точку - точка без экранирования будет соответствовать любому символу после foo.

sed 's/foo\./foo_/g'
0 голосов
/ 23 августа 2011

Для себя sed 's/foo\./foo_/g' работает.Но вы также можете попробовать:

sed -e 's/foo\./foo_/g'

и

sed -e "s/foo\\./foo_/g"

и

sed 's/foo[.]/foo_/g'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...