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'
ナックス「書き加えたら、Ctrlキーを押しながらOキーを押した後に、Enterキーを押してファイルを保存し、Ctrlキーを押しながらXキーを押してnanoを終了してください」
ナックス「最後に『./imageget.sh』とコマンドを打って、実際にこのシェルスクリプトを実行してみましょう
$ ./imageget.sh
デビー君「imgタグの後半の『" alt="なんとかかんとか" class="img-fluid">』の箇所が削除された……気がする」
ナックス「削除されたんだよ。信じて」
ナックス「というわけで次回、52.画像ファイルの置き場所のリストをテキストファイルに保存する」