次の行を含むファイルがありますLaTeX
。foo.tex
\includegraphics[width=0.49\textwidth]{img1}
\includegraphics{img2}
\subfloat{\includegraphics[width=0.3\textwidth]{img3}}
\subfloat{\includegraphics{img4}}
ファイル拡張子を追加するために、ファイル内の次の行を置き換えたいと思います。
\includegraphics[width=0.49\textwidth]{img1.png}
\includegraphics{img2.png}
\subfloat{\includegraphics[width=0.3\textwidth]{img3.png}}
\subfloat{\includegraphics{img4.png}}
私は次のコマンドを試して始めましたsed
。
cat foo.tex | sed 's/\(includegraphics.*[a-z,0-9,\-]}\)/\1.png}/g' > bar.tex
しかし、次のように返されます。
\includegraphics[width=0.49\textwidth]{img1}.png
\includegraphics{img2}.png
\subfloat{\includegraphics[width=0.3\textwidth]{img3}.png}
\subfloat{\includegraphics{img4}.png}
sed
ファイル拡張子を追加するコマンドを変更する方法は?
編集する
イメージファイル名はimg1、img2などではありません。
答え1
$ sed '/\\includegraphics/s/img[0-9]*/&.png/g' input
\includegraphics[width=0.49\textwidth]{img1.png}
\includegraphics{img2.png}
\subfloat{\includegraphics[width=0.3\textwidth]{img3.png}}
\subfloat{\includegraphics{img4.png}}
一致の最後にimg
追加されるランダムな数字(ゼロの数字を含む)が続く代替操作の正規表現検索。.png
交換のみを行う少し強力なバージョン~へ大きな括弧:
$ sed '/\\includegraphics/s/{\(img[0-9]*\)}/{\1.png}/g' input
\includegraphics[width=0.49\textwidth]{img1.png}
\includegraphics{img2.png}
\subfloat{\includegraphics[width=0.3\textwidth]{img3.png}}
\subfloat{\includegraphics{img4.png}}
{img3}
このコマンドは、(たとえば)を含む行を見つけて\includegraphics
抽出し、img3
追加し.png
、新しい中かっこで再度ラップすることを望みます{img3.png}
。