(無償) logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)

★LibreOfficeの導入事例★
詳細について

2015年5月9日土曜日

【Linux CentOS 6.5 64bit】ディレクトリ内のファイルに対して一気に特定の処理を施す方法【sedによる行丸ごと置換と上書き保存】

ディレクトリ内のファイルを一気に処理するための型 

for f in `find . -maxdepth 1 -type f` ; do 「処理内容 $f ; done

注意: 「`」は、「shift + @」で入力すること。


(説明)
find . -maxdepth 1 -type f によって、カレントディレクトリに限定して全ファイル名を取得する。
(-maxdepth 1 をはずすと、下階層にまで下ってファイル一覧が取得される。)
その取得されたファイルリストを使って「for f in」でループ処理させ、一気に処理を行う。

ところで、-maxdepth のオプションの位置に注意。間違えると次の警告文が現れた。
-maxdepthはオプションだが、-typeはオプションではない。 オプションは、他の要素の前に置くこと。
find: warning: you have specified the -maxdepth option after a non-option argument -type, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it).  Please specify options before other arguments.


(「処理内容」の例)
テキストファイルの特定の行(文字列で指定される行)を別の文字列 で置換するため、
sedの次のコマンドを用いた。
c \text
Replace the selected lines with text,
which has each embedded newline preceded by a backslash.

選択される複数行がそれぞれ、”バックスラッシュ(「\」)を前置して指定されたテキスト”で置換され、行は更新される。

次のようにコマンドを作成した。
sed -i -e '/server/c\server          127.0.0.1' 処理されるファイル名
serverを含む行を、「server          127.0.0.1」という文字列の新しい行に置換する。
オプション -i によって、処理されるファイルは上書き 保存されるので注意!



ディレクトリ内のファイルを一気に処理するコマンドをとして、次のように作成した。
念のために、echo"処理内容"として、動作を確認するようにした。

for f in `find . -maxdepth 1 -type f` ; do echo " sed -i -e '/server/c\server          127.0.0.1' $f " ; done

注意: 「`」は、「shift + @」で入力すること。

これによって、実際に実行されるコマンド文字列が一覧できる。
コマンドが正しいことが確認できたら、echo "処理" から、echo""を取り外して、
実際に処理が行えるようにする。



(参考)
・sed cコマンドの動作 (指定文字列で行を置き換え) 【Linuxコマンド】
< http://blog.livedoor.jp/morituri/archives/52018209.html > 2015年5月9日

・man sed

・sedでファイルを上書き保存
< http://www.dab.hi-ho.ne.jp/sasa/biboroku/unix/sed-i.html > 2015年5月9日