Linuxゲリラ戦記

imgタグの後半を削除する。

左を向いているペンギンみたいなキャラクター、ナックス

51.imgタグの後半を削除する

ナックス「こんにちは。画像収集するシェルスクリプトを作ってみたい。今回は第16回」

ナックス「今回は48.imgタグの説明で説明したようにimgタグの後半の『" alt="なんとかかんとか" class="img-fluid">』の部分を削除したいと思います」

ナックス「つまり、現在シェルスクリプトを実行すると、こんな感じになってるのを」

画像ファイルが置いている場所" alt="なんとかかんとか" class="img-fluid">
画像ファイルが置いている場所" alt="なんとかかんとか" class="img-fluid">
画像ファイルが置いている場所" alt="なんとかかんとか" class="img-fluid">

ナックス「こうしたい」

画像ファイルが置いている場所
画像ファイルが置いている場所
画像ファイルが置いている場所

ナックス「削除するには今回もsedコマンドを使います」

sedコマンド
テキストに対して行単位で色々な処理ができるコマンド。
sed -e 's/置換前の文字/置換後の文字/g'

ナックス「sedコマンドで削除する方法に関しては詳しくは50.imgタグの前半を削除するを参考にしてね」

ナックス「というわけで、ざっくり言えば『sed -e 's/" alt="なんとかかんとか" class="img-fluid">//g'』みたいにすればできそう」

sed -e 's/" alt="なんとかかんとか" class="img-fluid">//g'

ナックス「でも、一つ問題がある。この『なんとかかんとか』の部分は、実際は画像によってそれぞれ書かれてる文字が違う」

ナックス「でも大丈夫。sedコマンドは正規表現(せいきひょうげん)が使えるので、正規表現を使えばどうにかなりそう」

デビー君「正規表現?」

ナックス「昔、26.Linuxで使うお花マーク*とtouchコマンド(の補足)でワイルドカードの話をしたけど、正規表現はワイルドカードとよく似てる」

ナックス「ワイルドカードでの*(アスタリスク)は『0文字以上のほにゃらら』っていう意味だったけど、正規表現での*(アスタリスク)は『直前に指定した文字が0文字以上続く』っていう意味を持つ」

ナックス「さらに正規表現では.(ドット)は『なんらかの文字』という意味を持つ」

ナックス「つまり、ワイルドカードの『*』と正規表現の『.*』は同じ意味を持つ!多分!」

デビー君「多分か」

ナックス「そしてsedコマンドは行単位で文字を処理していくコマンド」

ナックス「つまりsedコマンドで正規表現を使って『sed -e 's/".*>//g'』ってやれば上手くいきそう」

sed -e 's/".*>//g'

ナックス「これは『"っていう文字で始まって』『なんやかんや文字があって』『>っていう文字で終わる』という指定を『置換前の文字』に指定している」

デビー君「すごいざっくりな指定だね」

ナックス「すごいざっくりな指定だけど多分これで上手く行く」

デビー君「50.imgタグの前半を削除すると同じように『置換後の文字』に何も指定しない事で削除してるんだね?」

ナックス「そうです」

ナックス「で、今回実際に書くコードだけど前回の50.imgタグの前半を削除するで書いたシェルスクリプトの2行目の末尾に『 | sed -e 's/".*>//g'』って書くと良いと思う」

 | sed -e 's/".*>//g'

ナックス「さて、実際にやって行きましょう。CUI環境を立ち上げて『cd imagework』とコマンドを打ってimageworkディレクトリに移動してください」

$ cd imagework/

ナックス「次に『nano imageget.sh』とコマンドを打って、nanoでimageget.shファイルを開いてください」

$ nano imageget.sh

ナックス「2行目の末尾に『 | sed -e 's/".*>//g'』を書き加えてください」

#!/bin/sh
wget -O - "https://linuxgerira.com/imagesearch.php?q=%E5%85%AC%E5%BC%8F%E5%A3%81%E7%B4%99&iamp;page=1" | grep "<img" | sed -e 's/  <img src="//g' | sed -e 's/".*>//g'

nanoを起動して2行目の末尾にコマンドを追記する

ナックス「書き加えたら、Ctrlキーを押しながらOキーを押した後に、Enterキーを押してファイルを保存し、Ctrlキーを押しながらXキーを押してnanoを終了してください」

ナックス「最後に『./imageget.sh』とコマンドを打って、実際にこのシェルスクリプトを実行してみましょう

$ ./imageget.sh

コマンドを実行する

コマンドの実行結果

デビー君「imgタグの後半の『" alt="なんとかかんとか" class="img-fluid">』の箇所が削除された……気がする」

ナックス「削除されたんだよ。信じて」

ナックス「というわけで次回、52.画像ファイルの置き場所のリストをテキストファイルに保存する