ファイルの中身を一行ずつ読んで、ある特定の文字列を検索してマッチしたら別の文字列に置換するスクリプトの作成例です。
(1)仕様
・ファイル内の<table border=1>の文字列を検索し、マッチしたら<table id=”test” border=1>に置換。
(2)作成したbashスクリプト
#!/bin/bash dir=/home/user/html/ filename=20140530千葉県.html filein="$dir$filename" fileout="$dir"tmp_"$filename" : > $fileout while read line; do if [[ $line =~ "<table border=1>".* ]]; then tmp=${line#"<table border=1>"} tmp="<table id=\"test\" border=1>"$tmp echo $tmp >> $fileout else echo $line >> $fileout fi done < $filein
(3)スクリプトの説明
●ファイル内のテキストを一行ずつ読み込み
while read line; do
:
done < $filein ●正規表現を使って文字列を検索
・二重角括弧、"=~"を使う。
if [[ $line =~ "<table border=1>".* ]]; then
※詳細は以下の記事参照。
bashでパターンマッチを使って条件評価
●変数の前方部をパターンマッチして削除
tmp=${line#"<table border=1>"}
※詳細は以下の記事参照。
bashのパターンマッチ演算子の使い方
●特殊文字のエスケープ
・ダブルクォートで囲むか、1文字づつバックスラッシュ
tmp=${line#"<table border=1>"}
tmp="<table id=\"test\" border=1>"$tmp
●ファイルの中身を空にする
・前回実施済みの出力ファイルが残っていたら中身を空にする。
: > $fileout 関連記事の目次