×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

[トップページ] [星雲紀行] [MLXS] [WPGen] [自作音楽] [モデル] [vi/vim] [tips] [自己紹介]

shell script 文字列処理

目次

  1. はじめに
  2. 文字列置換
  3. 複数ファイルへの連続文字列置換・挿入例
  4. 参考文献・参考ウェブページ
  5. 履歴

はじめに

このページはシェルスクリプトの文字列処理についてのTIPS を記載しています。

[content]

文字列変換

シェルスクリプトにはパターンマッチで変数の文字列を変更する機能があるが、これを使用するよりもsed やperl を用いたほうが強力な変換機能を用いることが可能。

$ echo $filename
toby.tar.gz
$ filename=`echo $filename | sed s/\.tar\.gz$/.tgz/`
$ echo $filename
toby.tgz

参考: 中央大学シェルスクリプト説明ウェブページ[シェルの置換機能]
bashで始めるシェルスクリプト基礎の基礎[パターンマッチ]

[content]

複数ファイルへの連続文字列置換・挿入例

複数ファイル中の文字列のパターンを変更する例。
多数のファイルの修正を一括でするときに重宝するやり方。

今回[目次] というメニューへのアンカーへのリンクを[contents] という文字列に変更したかった。
そのために、以下のスクリプトを実行して対処した。
改善点として、標準出力への表示、大文字・小文字の区別の有無、などが考えられる。
また、スクリプトでは入力対象を$* としている。これは各種のコマンドをファイルにして実行していたため、入力のファイル名称を用いる手法。
標準的なcygwin で変換を行っているためにコマンドラインでの日本語の文字列の入力ができなかった。
その回避のためにファイル形式にした。

  1. 「変更1」まずは目次そのものの変更をループのsed でかける。
    このとき、"" がエスケープシーケンスであることに注意。
    出力は中間ファイルに出力し、失敗に備える。
    for i in $*; do sed "s/<a name=\"contents\">/<a name=\"table_of_contents\">/g" $i > ${i%.html}.mod1 ; done
  2. 「変更2」その後リンク文字列の変更をループのsed でかける。
    このとき、[]/ がエスケープシーケンスであることに注意。
    for i in $*; do sed "s/<div align=\"right\"><small><a href=\"#contents\">\[目次\]<\/a><\/small><\/div>/<div align=\"right\"><small><a href=\"#table_of_contents\">\[content\]<\/a><\/small><\/div>/g" $i > ${i%.mod1}.mod2 ; done
  3. ついでに行末にvim タグを挿入する。このときは本文をcat したのちに、echo した文字列をファイル末にリダイレクトで追加している。
    for i in $*; do cat $i > ${i%.mod2}.mod3; echo "<!-- vim:set ts=2 sts=0 sw=2 tw=0: -->" >> ${i%.mod2}.mod3 ; done
  4. 最後にファイル名称を目的の物に直す。 出力のまえにオリジナルファイルのバックアップを取るべき。
    for i in $*; do cp -f $i ${i%mod3}html; done
[content]

参考文献・参考ウェブページ

[content]

履歴

  • 2006/11/08 追記
  • 2006/09/05 新規作成・分岐版
[content]
ご意見、ご感想、誤字、間違い等、お気づきの点がありましたら KGussan@Gmail.com まで連絡ください。
このウェブページの注意・免責事項 Copyright (C) 2004-2012 KGussan. [トップページ]
[PR:元国税局勤務の起業家向け、遺産相続の相談なら植村洋税理士事務所:一時間無料税理士相談。お気軽に。]