sedを使用して変数をgrepし、同じ行にテキストを挿入してコピーします。

sedを使用して変数をgrepし、同じ行にテキストを挿入してコピーします。

title="<text>"たとえば、すべての変数をgrepし、LinuxのHTMLファイル内でtitle="best-pencil"同じ行にコピーしたいと思います。alt="best-pencil"

<p class="images"><img src="my-favorite-pencil.jpg" title="best-pencil">

に:

<p class="images"><img src="my-favorite-pencil.jpg" title="best-pencil" alt="best-pencil">

を使用してこれを行うにはどうすればよいですかsed

答え1

文字列がi)常に二重引用符で囲まれていて、絶対に含まれていないこと、および" ii)常に1行にしかないと確信できれば、これは簡単です。

$ sed -E 's/title=("[^"]*")/& alt=\1/' file
<p class="images"><img src="my-favorite-pencil.jpg" title="best-pencil" alt="best-pencil">

秘密とは、次のtitle="0以上のnon-を見つけてそれを「キャプチャ」し(周囲の括弧が実行するアクション)、記号は「一致する項目」を意味します。 、ここではそれ自体に置き換えて、その後に 。""("[^"]*")\1sed&title="foo"alt="foo"

sedをサポートしていないバージョンがある場合は、次のものを代わり-Eに使用できます。

$ sed 's/title=\("[^"]*"\)/& alt=\1/' file
<p class="images"><img src="my-favorite-pencil.jpg" title="best-pencil" alt="best-pencil">

関連情報