Поиск и замена sed при наличии точек и подчеркиваний
Как заменить foo. с foo_ с sed просто работает
sed 's/foo./foo_/g' file.php
не работает.
Спасибо!
Ответ 1
Сбегите .:
sed 's/foo\./foo_/g' file.php
Пример:
~$ cat test.txt
foo.bar
~$ sed 's/foo\./foo_/g' test.txt
foo_bar
Ответ 2
Уберите точку с помощью \
sed 's/foo\./foo_/g' file.php
Если вы найдете комбинацию/и\запутываете, вы можете использовать другой символ 'separator'
sed 's#foo\.#foo_#g
Второй символ после s может быть любым, и sed будет использовать этот символ в качестве разделителя.
Ответ 3
Интересно, что если вы хотите найти и заменить только точку, вы должны поместить точку в набор символов. Исключение только одной точки в команде 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 _
-
Пол
Ответ 4
Вам нужно избегать точки - неопределенная точка будет соответствовать любому символу после foo.
sed 's/foo\./foo_/g'
Ответ 5
Для себя работает sed 's/foo\./foo_/g'. Но вы также можете попробовать: