2017-04-03 21 views
2

私はいくつかのローカル画像を含むメールテンプレートを作成しています。ローカル画像をベースに置き換えてください。

私は画像をbase64に置き換えるシェルスクリプトを作成しようとしています。だから、基本的には、自動的にオンに:

 <img width="100%" src="./img/my_image.gif" /> 

<img width="100%" src="data:image/gif;base64,XXXXXXX" /> 

に今の私は、このスクリプトを使用:

#!/bin/bash 

awk -F'[()]' -v q="'" ' 

/src="(.*)"/ { 
    cmd=sprintf("openssl enc -base64 -in %s | tr -d %c\\n%c",$2,q,q) 
    cmd | getline b64 
    close(cmd) 
    $0=$1 "(data:image/gif;base64," b64 ");" 
}1' ./my_template.html 

私は2つの問題に遭遇: - 私の正規表現はしていないようです正規表現で正しく動作したにもかかわらず正しい - この正規表現はローカルではない画像も捕捉します(src = "https:// ....")

ここで動作させるにはどうすれば調整できますか?

+0

あなたの実際の要求とその失敗の方法よりも実際の要件についてもっと説明できますか?最小限の入力と検証可能な出力が期待できますか? – Inian

答えて

0

試してみてください。

awk '/^<img/{w=$3;gsub(/.*\/|\"/,"",w);split(w, array,".");sub(/src=\".*\"/,"src=\"data:" array[1] "/"array[2]";base64,XXXXXXX\"",$3);print}' Input_file 

これはあなたを助けていない場合の質問の多くは、あなたの質問にそこにあるように、私はInianに同意するものの、あまりにもあなたのポストにすべての条件と予想される出力を言及してください。

+0

ありがとうございました。基本的に私はスクリプトを書くつもりです: "すべての出現箇所を見つけるかsrc =" some/path "、もしこのパスがローカルなものであれば、それが指すファイルをフェッチしてbase64に変換してから、 srcタグのbase64でエンコードされたファイル "awkで実現可能かどうかわかりませんが、おそらく他の方法がありますか? – Spearfisher

+0

十分な入力と予想される出力を持つ投稿を編集してください。 – RavinderSingh13

0

あなたのファイルはわかりませんが、awhを使ってIMHOを編集するのは良い考えではありません。一般的には、私はperlとそのようなより良いツールを使用したいと思います。

xmlstarletを使用した例です。次のスクリプト:

#!/bin/bash 

htmlfile=t.html 

encode_image() { 
     local img="$1" 
     ext="${img##*.}" 
     printf "data:image/%s;base64,%s" "$ext" $(openssl base64 -A -in "$img") 
} 

while read -r src; do 
     encoded=$(encode_image "$src") 
     xmlstarlet ed --inplace -u "//img[@src='$src']/@src" -v "$encoded" t.html 
done < <(xmlstarlet sel -t -v '//img/@src' -n "$htmlfile") 

このt.html

<!DOCTYPE HTML> 
<html> 
     <head> 
       <meta charset="UTF-8"/> 
     </head> 
     <body> 
       <p>bla</p> 
       <img width="100%" src="./img/my_image.gif" /> 
       <p>otherbla</p> 
       <img width="100%" src="./img/my_image2.gif" /> 
     </body> 
</html> 

からは、これを作成します。

もちろん
<!DOCTYPE HTML> 
<html> 
    <head> 
    <meta charset="UTF-8"/> 
    </head> 
    <body> 
    <p>bla</p> 
    <img width="100%" src="data:image/gif;base64,iVB....="/> 
    <p>otherbla</p> 
    <img width="100%" src="data:image/gif;base64,iVBO...="/> 
    </body> 
</html> 

、HTMLを正しくフォーマットする必要があり、そうでない場合、パーサーは死んでしまいます。

関連する問題