ファイルの中身を一行ずつ読んで文字列を置換するbashスクリプト

ファイルの中身を一行ずつ読んで、ある特定の文字列を検索してマッチしたら別の文字列に置換するスクリプトの作成例です。

(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

関連記事の目次

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください