web-dev-qa-db-ja.com

ドットとアンダースコアが存在する場合、検索してsedに置き換えます

Fooを置き換える方法fooを使用し、sedを単に実行する

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

動作しません。ありがとう!

23

.をエスケープします:

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

例:

~$ cat test.txt 
foo.bar
~$ sed 's/foo\./foo_/g' test.txt 
foo_bar
24
rid

興味深いことに、ドットのみを検索して置換する場合は、文字セットにドットを配置する必要があります。何らかの理由でsedコマンドでドットだけをエスケープしても機能しません。ドットはまだ1文字のワイルドカードに展開されます。

$ 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

aa-bb-cc

検索に先頭の文字を追加すると、エスケープが機能します。

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

foo_

もちろん、文字セットにドットを入れることもできます。

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

foo_

-ポール

12
Paul S

\でドットをエスケープします

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

/と\の組み合わせがわかりにくい場合は、別の「区切り文字」を使用できます

sed 's#foo\.#foo_#g

Sの後の2番目の文字は何でもよく、sedはその文字をセパレータとして使用します。

6
sashang

ドットをエスケープする必要があります-エスケープされていないドットは、fooの後のすべての文字に一致します。

sed 's/foo\./foo_/g'
3

自分のために、 sed 's/foo\./foo_/g' 取り組んでいます。しかし、あなたも試すことができます:

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

そして

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

そして

sed 's/foo[.]/foo_/g'
0
jfg956