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方言を使います。お使いのシステムで利用可能な場合は、sed
Perlを使用している可能性が高くなります。
与えられた
<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
貪欲ではない演算子はサポートされていませんが、他の回答でトリックを使用できます[^"]*"
。これはすべて飲み込むことを意味します。この場合、実際に同じことを行う文字です。
答え2
CS_CODEをSN_CODE、CS_IDに具体的に変更するには、次のものを使用できます。
's/CS_CODE/SN_CODE,CS_ID/g'
値が異なる場合に使用できます
's/value=\S*\S/value="SN_CODE,CS_ID"/g'
答え3
sed
HTML(または他のプログラミング言語)処理のための最良の選択ではありませんが、とにかく:
sed -e 's/\(value\)="[^"]*"/\1="SN_CODE,CS_ID"/'
明確ではないかもしれない2つのことがあります。
- 後で使用できるようにパターンをグループ
\(
化します。\)
\1
[^"]*
以下を除くすべての文字と一致するために使用されます。"