与えられた

与えられた

sedコマンドを使用して、次のノードの値を変更しようとします。

<KeyValue key="EMPTY_SEARCH_CRITERIA" type="String" value="CS_CODE" comment="Configured empty search criteria."/>

初期値には任意の文字列値を含めることができるので、ワイルドカードを使用します。例えば。

sed -e 's/value=.*/value="SN_CODE,CS_ID" comment="Configured empty search criteria."\/\>/g' CMS_conf.xml > tempfile
         ^        ^                                                                     ^

ただし、この場合は comment 属性も含める必要があります。

コメント属性を入力せずにこれを行う方法はありますか?

ベストアンサー1

私は正規表現のPerl方言を使います。お使いのシステムで利用可能な場合は、sedPerlを使用している可能性が高くなります。

与えられた

<KeyValue key="EMPTY_SEARCH_CRITERIA" type="String" value="CS_CODE" comment="Configured empty search criteria."/>

パール正規表現

perl -i -pe 's/(value=)".*?"/\1"some_replacement_string"/g' <filename>

ノート

まず、端末に印刷してテストしてみることもできます。

perl -pe 's/(value=)".*?"/\1"some_replacement_string"/g' <filename>

または、拡張子を使用してバックアップを作成してください。.bak

perl -i.bak -pe 's/(value=)".*?"/\1"some_replacement_string"/g' <filename>

正規表現の説明:

  • (): 変数にグループ化\1
  • ":一重引用符であるため、引用符は文字通りと見なされるため、エスケープする必要はありません。
  • ?:飼いならす*の場合、最初のマッチで噛むのをやめます(最後のマッチまで噛み続けません)。sed貪欲ではない演算子はサポートされていませんが、他の回答でトリックを使用できます[^"]*"。これはすべて飲み込むことを意味します。この場合、実際に同じことを行う文字です。

おすすめ記事