Ответ 1
Сбегите .
:
sed 's/foo\./foo_/g' file.php
Пример:
~$ cat test.txt
foo.bar
~$ sed 's/foo\./foo_/g' test.txt
foo_bar
Как заменить foo. с foo_ с sed просто работает
sed 's/foo./foo_/g' file.php
не работает. Спасибо!
Сбегите .
:
sed 's/foo\./foo_/g' file.php
Пример:
~$ cat test.txt
foo.bar
~$ sed 's/foo\./foo_/g' test.txt
foo_bar
Уберите точку с помощью \
sed 's/foo\./foo_/g' file.php
Если вы найдете комбинацию/и\запутываете, вы можете использовать другой символ 'separator'
sed 's#foo\.#foo_#g
Второй символ после s может быть любым, и sed будет использовать этот символ в качестве разделителя.
Интересно, что если вы хотите найти и заменить только точку, вы должны поместить точку в набор символов. Исключение только одной точки в команде sed по какой-то причине не работает. Точка все еще расширяется до одиночной символьной карты.
$ bash --version # Ubuntu Lucid (10.04)
GNU bash, версия 4.1.5 (1) -release (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
аа-бб-сс
С добавлением ведущих символов в поиск побег работает.
$ echo foo. | sed s/foo\./foo_/g # works
Foo _
Конечно, также работает точка в наборе символов.
$ echo foo. | sed s/foo[.]/foo_/g # also works
Foo _
- Пол
Вам нужно избегать точки - неопределенная точка будет соответствовать любому символу после foo.
sed 's/foo\./foo_/g'
Для себя работает sed 's/foo\./foo_/g'
. Но вы также можете попробовать:
sed -e 's/foo\./foo_/g'
и
sed -e "s/foo\\./foo_/g"
и
sed 's/foo[.]/foo_/g'