Bashを使用して同じ単語を含む部分を削除する方法

Bashを使用して同じ単語を含む部分を削除する方法

ディレクトリに複数のファイルがあり、各ファイルから部分単語を削除したいと思います。各ファイルの幅と高さの数字が異なるので、削除したいと思います。

今は次のように使用していますが、数字が多くなるとより良い方法があるようです。

sed -i 's/width="12"//' ./*.*
sed -i 's/width="16"//' ./*.*
sed -i 's/width="24"//' ./*.*
sed -i 's/width="25"//' ./*.*
sed -i 's/width="45"//' ./*.*
sed -i 's/height="12"//' ./*.*
sed -i 's/height="16"//' ./*.*
sed -i 's/height="24"//' ./*.*
...
...

ご協力ありがとうございます。ありがとうございます。

ベストアンサー1

入力がXMLであると仮定すると、次のようになります。

<?xml version="1.0"?>
<root>
  <tag width="23" height="34"/>
  <tag alt="something something" width="23" height="34"/>
  <tag width="23" alt="something else" height="34"/>
  <tag width="abba">Very wide</tag>
</root>

...その後、次のように、属性を含む各ドキュメントノードから属性を削除できますwidthheightxmlstarlet

xmlstarlet ed --delete '//@width' --delete '//@height' file.xml

...例の文書によると、次のように生成されます。

<?xml version="1.0"?>
<root>
  <tag/>
  <tag alt="something something"/>
  <tag alt="something else"/>
  <tag>Very wide</tag>
</root>

次の名前で終わる現在のディレクトリ内のすべてのファイルに対してこれを行います.xml(ファイルが多すぎないと仮定します)。

xmlstarlet ed --inplace --delete '//@width' --delete '//@height' ./*.xml

このオプションを使用すると、各ファイルの編集が内部で行われます--inplace

おすすめ記事