2012-01-19 16 views
1

sedが初めてです。sedを使用してテキストファイルを検索して置き換えます

私は、テキストファイルを持っていると私は、この文字列の出現置換する:この文字列で

allow ^127\.0\.0\.1$ 

を:

allow ^107\.21\.206\.35$ 

私が使用したコードは以下の通りであった:

sed 's/allow ^127\.0\.0\.1$/allow ^107\.21\.206\.35$/g' test.txt 

しかし、IDは機能しませんでした。私は何を間違えたのですか?

おかげ

+0

ファイル自体を変更しますか?もしそうなら、 '-i'オプションが必要です。 – cmbuckley

答えて

0

ないだけ\.(正規表現は、「任意の一文字にマッチ」として.を扱う)(別のバックスラッシュ付き)。 ^および$文字も正規表現で予約されています。置き換える文字列で

$ echo "allow ^127\.0\.0\.1$" > /tmp/test 
$ cat /tmp/test 
allow ^127\.0\.0\.1$ 
$ sed 's/allow \^127\\\.0\\\.0\\\.1\$/allow ^107\\.21\\.206\\.35$/g' -i /tmp/test 
$ cat /tmp/test 
allow ^107.21.206.35$ 

\は単一\がそれに.次をエスケープしますそれ以外の場合はエスケープする必要があります。

+0

魅力のように働く –

+0

@potong良い点、上記の例では、sedの正規表現で最初の '^'をエスケープする必要はありません。しかし、 '^'はセット内の否定演算子でもあり、そのコンテキストでもエスケープする必要があります。 – Andy

1

あなたは '^' と '$' エスケープする必要があります。

 
$ sed 's/allow \^127\.0\.0\.1\$/allow \^107\.21\.206\.35\$/g' test.txt 

エスケープさは、 '^' 行の先頭にマッチし、 '$' を行の末尾に一致します。文字を正確に一致させるには、 '\'でエスケープする必要があります。 ^.[$()|*+?{\

+0

ありがとうございました..試しました..できませんでした。コードをペーストしました –

+0

@Monty:あなたの入力テキストにリテラル '\'があることに気が付きませんでした。 –

0

これはあなたのために働くかもしれない::次の文字は文字通り一致するようにエスケープする必要があるsedの使用基本的な正規表現のほとんどの実装

echo 'allow ^127\.0\.0\.1$' | 
sed 's/allow ^127\\.0\\.0\\.1\$/allow ^107\\.21\\.206\\.35$/' 
allow ^107\.21\.206\.35$ 

^$だけでエスケープする必要があります置換コマンドが文字列の前後にある場合は置換コマンドの一部と一致します。一致と置換の両方で\をエスケープする必要があります。あなたは脱出する必要があります

関連する問題