sedまたは正規表現パターンを使用してファイルからバックスラッシュの後に続くテキストを削除する方法

sedまたは正規表現パターンを使用してファイルからバックスラッシュの後に続くテキストを削除する方法

私のファイルには次のものがあります。 "monitoring"テキストとmonitoring/サフィックス()のバックスラッシュを削除する必要があります。

 <base  href="/monitoring/" />

その後、出力は次のようになります

<base  href="/" />

sedまたは他の方法でこれを達成できます。

答え1

文書が正しい形式のXML文書であるとします。

<?xml version="1.0"?>
<root>
  <base href="/monitoring/"/>
</root>

xmlstarlet次のコマンドは、対応する文字列monitoring/(およびそれに続くすべての項目)を含むノード属性から削除します。basehref

xmlstarlet ed \
    -u '//base/@href[contains(.,"monitoring/")]' \
    -x 'substring-before(.,"monitoring/")' file.xml

これにより、新しい名前にリダイレクトし、元のファイルをその名前に置き換える必要があるXML文書が出力されます。

答え2

専用パーサー(構造化テキストなど)を使用することを強くお勧めしますが、ファイルにそのタグxmlstarletが1つしかない限り、これは機能します。sedbase

sed -E '/\<base/s,(href="/)[^"]+,\1,' input.html 

<baseこれはパターンを含む行に作用し、パターンを置き換えて次のテキストを削除します。href="/any text up to the double quotehref="//

デフォルトでは、ファイルは編集されません。ファイルを編集するには、出力をファイルにリダイレクトするか、内部編集オプションを使用しますi

sed -i -E '/\<base/s,(href="/)[^"]+,\1,' input.html 

関連情報