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
-i
sed
借り入れを実装するための一部(すべてではない)オプションがありますperl
。perl
ここでは簡単になります。
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/.../.../
について心配する必要はありません。 、一致する限り。/
{
}
*?
はい、貪欲ではないバージョンです*
。\b
width="
は単語の境界なので、たとえば一致しません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
答え2
フォーマットが改行を許可している間、問題はsed
1行ずつ機能する可能性がありますsvg
。ここではそうです。したがって、width
後ろにaが続く行がないため、>
置き換えはありません。
ただし、path
要素が同じ行にある可能性があるため、状況が悪くなる可能性があります.*
。
width
そして、それぞれ以下を交換することをお勧めしますheight
。
sed 's/width="[^"]*/width="{size}/;s/height[^"]*"/height="{size}" viewBox="0 0 512 512" fill={color} class={$$props.class} {...$$restProps} aria-label={ariaLabel} /' ./*.*
- このオプションを削除しました
-i
。テストする前に再度追加しないでください。 [^"]*
以外のすべての文字と一致するため、"
予想以上の文字を削除するのを防ぎます。- 意図的なものかわからないので、コードから改行を削除しました。代替の実際の改行文字の前にはバックスラッシュが必要です。
答え3
使用sed
。
$ sed -i.bak s'~\(width="\)[^>]*~\1{size}" height="{size}" viewBox="0 0 512 512" fill={color} class={$$props.class} {...$$restProps} aria-label={ariaLabel}~' input_file
<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