私のファイルには次のものがあります。 "monitoring"テキストとmonitoring/
サフィックス()のバックスラッシュを削除する必要があります。
<base href="/monitoring/" />
その後、出力は次のようになります
<base href="/" />
sedまたは他の方法でこれを達成できます。
答え1
文書が正しい形式のXML文書であるとします。
<?xml version="1.0"?>
<root>
<base href="/monitoring/"/>
</root>
xmlstarlet
次のコマンドは、対応する文字列monitoring/
(およびそれに続くすべての項目)を含むノード属性から削除します。base
href
xmlstarlet ed \
-u '//base/@href[contains(.,"monitoring/")]' \
-x 'substring-before(.,"monitoring/")' file.xml
これにより、新しい名前にリダイレクトし、元のファイルをその名前に置き換える必要があるXML文書が出力されます。
答え2
専用パーサー(構造化テキストなど)を使用することを強くお勧めしますが、ファイルにそのタグxmlstarlet
が1つしかない限り、これは機能します。sed
base
sed -E '/\<base/s,(href="/)[^"]+,\1,' input.html
<base
これはパターンを含む行に作用し、パターンを置き換えて次のテキストを削除します。href="/any text up to the double quote
href="/
/
デフォルトでは、ファイルは編集されません。ファイルを編集するには、出力をファイルにリダイレクトするか、内部編集オプションを使用しますi
。
sed -i -E '/\<base/s,(href="/)[^"]+,\1,' input.html