1

SEDを使用してファイルを検索および置換する既存のスクリプトを変更する必要があります。私の問題は、2つの基準が満たされた場合にのみ、sedを使用して同じ検索と置換を行う必要があることです。

私は以下のようにfindとsedを使用します:

find . -name 'search.do*' -exec sed -i "/href/\
s/href=\"[^\"]*sommerhus\/detail\.do[^\"]*unitId=\([^\"]*\)\"/href=\"sommerhus-\1.html\"/g" {} \;

しかし今、私は「href」と別の検索基準が満たされた場合にのみ置換が行われることを確認する必要がありますfx "href"&&"language"が存在します

-eを試してみましたが、成功しませんでした。出来ますか ??

4

1 に答える 1

4

使用できます/href.*language\|language.*href/(各一致の2番目の単語の前のスペースなど、いくつかの追加の制約があります)。

コマンドをブロックにネストすることもできます。

sed '/href/{ /language/s/<match>/<replace>/ }'

これはより拡張性があります。3番目のパターンを追加するには、1組のブレースとパターンを追加するだけで済みますが、上記の代替ソリューションでは、合計6つのパターンが必要です(可能な順序ごとに1つ)。


/また、パターンの内側をバックスラッシュする必要をなくすために、sedでは任意の文字を区切り文字として使用できます。例@

find . -name 'search.do*' -exec sed -i "/href/\
s@href=\"[^\"]*sommerhus/detail\.do[^\"]*unitId=\([^\"]*\)\"@href=\"sommerhus-\1.html\"@g" {} ;'

(この場合はわずかな利益ですが、ファイルパスやURLなどを処理するときの他の状況について知っておくと便利です)

于 2012-06-21T08:29:47.653 に答える