web-dev-qa-db-ja.com

SEDを使用して、ターゲット文字列内のURL文字列を検索して「/」文字に置き換える方法は?

OS XターミナルからSEDを使用して、検索と置換を実行しようとしています。

テキストファイル全体にこの文字列が散らばっていると想像してください。 http://www.find.com/page

そして、私はそれをこの文字列に置き換えたいと思います: http://www.replace.com/page

文字列で「/」文字を適切にエスケープまたは使用する方法がわからないため、問題が発生しています。たとえば、単に「猫」を見つけて「犬」に置き換えたい場合、次のコマンドが完全に機能することがわかりました。

sed -i '' 's/cat/dog/g' file.txt

猫と犬が「/」文字を含む文字列またはURLを持っている代わりに、同じ機能を達成する方法についてのアイデアはありますか? 「/」文字をエスケープするさまざまな方法を試しましたが、SEDは文字列を「見つける」ことができず、検索および置換アクションを実行できません。

ヘルプやヒントは大歓迎です。

ありがとう!

41
LearnWebCode

/sedコマンドのthe区切り文字ではなく、可能なものの1つにすぎません。この例では、たとえば文字列と競合しないため、代わりに,を使用できます。

echo 'I think http://www.find.com/page is my favorite' | 
    sed 's,http://www.find.com/page,http://www.replace.com/page,g'
114

sedは、「s」に続くものを区切り文字として使用できます。 URLを使用しているため、置換が終了して置換が開始されるときにsedを混同しないように、/以外の異なる区切り文字を使用することをお勧めします。

しかし、あなたも間違いなく/を使用できると言っていました。リテラル/をエスケープする必要があります。

そのため、次のいずれかを実行できます。

sed 's/http:\/\/www.find.com\/page/http:\/\/www.replace.com\/page/g' input_file

または、別の区切り文字を使用して、暗号化されたsedの暗号化を回避します。

sed 's#http://www.find.com/page#http://www.replace.com/page#g' input_file
30
jaypal singh