特定の単語や文字を置き換える方法

特定の単語や文字を置き換える方法

width最初のファイルに追加したいディレクトリに複数のファイルがあります>。各ファイルには異なるwidth値があります。

ファイルには以下が含まれます。

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="512px"
 height="512px"><path //removed for brevity

他のファイルには次のものがあります。

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="415px"
 height="450px"><path //removed for brevity

など。

私はそれらを次に変えたいと思います:

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="{size}" 
height="{size}" viewBox="0 0 512 512" fill={color} 
class={$$props.class} {...$$restProps} aria-label={ariaLabel}><path 
//removed for brevity

以下を試しましたが、動作しません。

sed -i 's/width.*>/width={size} height={size} viewBox="0 0 512 512" 
fill={color} 
class={$$props.class} {...$$restProps} aria-label={ariaLabel}/' ./*.*

ベストアンサー1

-ised借り入れを実装するための一部(すべてではない)オプションがありますperlperlここでは簡単になります。

perl -0777 -pi -e 's{\bwidth=".*?>}{width="{size}" 
height="{size}" viewBox="0 0 512 512" fill={color} 
class={\$\$props.class} {...\$\$restProps} aria-label={ariaLabel}>}gs' yourfile

どこ:

  • -0777一度に1行ではなくファイル全体を処理します。
  • s{...}{...}は別の書き方ですが、パターンや代替文字s/.../.../について心配する必要はありません。 、一致する限り。/{}
  • *?はい、貪欲ではないバージョンです*
  • \bwidth="は単語の境界なので、たとえば一致しませんminwidth="。しかし、まだ一致していますmin-width="。これが問題であれば(?<=\s)前にスペースがあれば)。
  • このフラグは、必要に応じてs複数行にまたがる可能性があります(改行と一致することもあります)。最初の項目のみを置き換えるには、このフラグを削除してください。.*.g

タグでのみ<svg>これを実行してください。

perl -0777 -pi -e 's{<svg[^<>]*\bwidth="\K.*?>}{{size}" 
height="{size}" viewBox="0 0 512 512" fill={color} 
class={\$\$props.class} {...\$\$restProps} aria-label={ariaLabel}>}gs' yourfile

おすすめ記事