Linuxゲリラ戦記

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

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

50.imgタグの前半を削除する

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

ナックス「今回は48.imgタグの説明で説明したようにimgタグの前半の<img src="の部分を削除したいと思います」

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

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

ナックス「こうしたい」

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

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

sedコマンド
テキストに対して行単位で色々な処理ができるコマンド。

ナックス「今回はsedコマンドで文字を置換(ちかん)します」

デビー君「変態かな?」

ナックス「痴漢(ちかん)じゃないよ。置換(ちかん)だよ。置き換え、つまり文字を置き換えます」

ナックス「sedコマンドで文字を置換する場合の使い方は『sed -e 's/置換前の文字/置換後の文字/g'』みたいな感じ」

sed -e 's/置換前の文字/置換後の文字/g'

ナックス「例えば以下のように使うよ」

sed -e 's/abc/def/g' before.txt > after.txt
before.txtファイルに書かれている全てのabcという文字をdefに書き換えて、after.txtファイルに保存する
cat before.txt | sed -e 's/あいうえお/か/g' > after.txt
before.txtファイルに書かれている全ての「あいうえお」という文字を「か」に書き換えて、after.txtファイルに保存する(catコマンドはファイルの中身をCUI環境(端末、コンソールのこと)に表示するコマンド)

ナックス「今回はimgタグの前半の『 <img src="』の部分を削除したいので『sed -e 's/ <img src="//g'』みたいにすればいいと思う」

sed -e 's/  <img src="//g'

デビー君「『置換後の文字』に何も指定しないんだね?」

ナックス「そうです置換後の文字に何も指定しないことで削除してしまおうという魂胆です」

ナックス「また、気をつけて欲しいのは『置換前の文字』に指定している『 <img src="』です。よく確認して欲しいのですが、一番最初に半角スペースを2つ空けています」

デビー君「『置換前の文字』の『 <img src="』で最初に半角スペースを2つ書いてるの?」

ナックス「そうです。46.ファイル名を指定してダウンロードしてみるでダウンロードしたabcというファイルをnanoで開いてimgタグが書かれている箇所を確認して欲しいのですが、imgタグが使われている箇所は全部最初に半角スペースが2文字書かれています」

デビー君「マジか」

ナックス「マジです」

ナックス「なので49.imgタグが使われている行を抜き出すでgrepコマンドでimgタグが使われている行を抜き出しましたが、全部、最初に半角スペース2文字分空いています」

デビー君「マジか」

ナックス「マジです」

ナックス「この半角スペース2文字分も削除したいので、置換前の文字『 <img src="』は最初に2つ半角スペースを書いているのです」

デビー君「オッケー」

ナックス「で、今回実際に書くコードは、今まで作成してきたシェルスクリプトの2行目の末尾に『 | sed -e 's/ <img src="//g'』と書けばいいと思う」

 | sed -e 's/  <img src="//g'

ナックス「大体やりたい事が分かったら一緒にやっていきましょう」

ナックス「CUI環境を開いて『cd imagework』とコマンドを打ってimageworkディレクトリに移動してください」

$ cd imagework/

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

$ nano imageget.sh

ナックス「2行目の末尾に『 | sed -e 's/ <img src="//g'』と書き加えてください」

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

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

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

ナックス「最後に『./imageget.sh』とコマンドを打って、シェルスクリプトを実行してください」

$ ./imageget.sh

コマンドを実行する

コマンドの実行結果

デビー君「imgタグの前半の『 <img src="』の箇所が削除された……気がする」

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

ナックス「というわけで次回、51.imgタグの後半を削除する