ディレクトリ内の複数のファイルに対しファイル内の文字列を置換するbashスクリプト

ディレクトリ内の複数のファイルに対し、ファイル内の特定の文字列を置換するbashスクリプトの作成例です。

※目次をクリックすると目次の下部にコンテンツが表示されます。

仕様
・対象ディレクトリ
 /home/user/html/
・対象ファイル
 ○○県.html
・出力ファイル名
 ○○県.html_rep
・置換内容
下記のように<table>タグにid属性を追加する形で置換します。
(置換前)
<table border=1>・・・
 :
<table border=1>・・・
 :
<table border=1>・・・
 :
<table border=1>・・・
 :
(置換後)
<table id=”id1″ border=1>・・・
 :
<table id=”id2″ border=1>・・・
 :
<table id=”id3″ border=1>・・・
 :
<table id=”id4″ border=1>・・・
 :

作成したbashスクリプト
#!/bin/bash

tableid=(id1 id2 id3 id4)
dir=/home/user/html/
files="$dir*"
cd $dir
for filepath in $files; do
  if [ -f $filepath ] ; then
    if [[ $filepath =~ .*県.*html ]]; then
      fileout="$filepath"_rep
      : > $fileout
      i=0
      while read line; do
        if [[ $line =~ "<table border=1>".* ]]; then
          tmp=${line#"<table border=1>"}
          tmp="<table id=\"${tableid[$i]}\" border=1>"$tmp
          echo $tmp >> $fileout
          let i++
        else
          echo $line >> $fileout
        fi
      done < $filepath
    fi
  fi
done

スクリプトの説明
●ファイル内のテキストを読み込み置換
 
以下の記事参照。
ファイルの中身を一行ずつ読んで文字列を置換するbashスクリプト
 
●for文を使ってディレクトリ内のファイルに対する操作
 
以下の記事参照。
bashのfor文を使ってディレクトリ内のファイル一覧とディレクトリ一覧を出力

関連記事の目次

コメントを残す

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

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