ファイルの中身を一行ずつ読んで、ある特定の文字列を検索してマッチしたら別の文字列に置換するスクリプトの作成例です。
(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 関連記事の目次
- bashのシェルスクリプト実行方法
- bashのシェルスクリプト プログラミング方法メモ
- bashのパイプの使い方
- bashのlist、サブシェル、コマンドブロック
- bashでの式の評価と算術演算
- bashでパターンマッチを使って条件評価
- bashのfor文で配列やセパレータ付き文字列から各要素を取り出す
- bashのfor文を使ってディレクトリ内のファイル一覧とディレクトリ一覧を出力
- bashのselect制御構造
- bashのパターンマッチ演算子の使い方
- ファイルの中身を一行ずつ読んで文字列を置換するbashスクリプト
- ディスク使用量が多いディレクトリを抽出するbashスクリプト
- ディレクトリ内の複数のファイルに対しファイル内の文字列を置換するbashスクリプト
- Bashスクリプトでmysqldumpバックアップと世代管理
- Dos攻撃など大量アクセスのログを検知するBashスクリプトを作成