カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

複数ファイル内の文字列を置換して上書き保存する

【ファイル内の文字列を置換して上書き保存する】
書式
perl -p -i -e ‘s/検索文字列/置換文字列/g’ 対象ファイル名

-p…入力ファイルから1行ずつ取り出して処理し、表示する。
-i…ファイルを修正する。拡張子を指定すると、その拡張子でバックアップを取ってくれます。
-e…直後に続く部分をスクリプトとして処理する。
s/検索文字列/置換文字列/g…文字列の置換。検索文字列を置換文字列に置き換える。最後の「g」(gスイッチ)を指定すると、1行に複数検索文字列がある場合、全て置換してくれる。なければ最初の1個だけ置換。

【複数ファイル内の文字列を置換して上書き保存する】
書式
find [検索開始ディレクトリ] [オプション] -exec perl -p -i -e ‘s/検索文字列/置換文字列/g’ {} \;

例1)

find . -type f -exec perl -p -i -e 's/test/test/g' {} \;

例2)拡張子等を限定するとき

find ./*.txt -type f -exec perl -p -i -e 's/test/test/g' {} \;

例3)指定したディレクトリ以下をすべて置き換えしたいとき

find . -name '*.txt' -type f -exec perl -p -i -e 's/test/test/g' {} \;

としたいところですが、これだとfindで検索対象のテキストファイルの更新日付が全て新しくなってしまいました。
正解は以下になります。

find . -name '*.txt' -type f | xargs grep -l 'test' | xargs perl -p -i -e 's/test/test/g'

拡張子を限定しないと、JPGやGIFファイルのバイナリファイルでもなんでもアクセスしてしまうので注意すべし。
詳しくはこちら→[findとgrepを使ってファイルの中身を一括検索と置換]

4,155 views

CGIでsendmailが使えない

# OS: Red Hat Enterprise Linux 5
# perl: 5.8.5
# qmail: 1.03
# apache: 2.2.8

apacheはプリインストールのものを廃止し、別途ソースからインストール。
sendmailを廃止し、qmailを導入したところ、CGIからメールが送れないという現象が発生。
別のサーバー(CentOS)では同じCGIを実行しても正常に送信できる。
perlで文法を確認してもエラーはなし。

CGIからのメール送信を実行すると、auditからセキュリティの警告が発生。
続きを読む…»

3,153 views

telnetでESMTP

telnet ***.***.***.*** 25
helo example.com
mail from: mail@example.com
rcpt to: to@example.jp
data
from: mail@example.com<test>
subject: test
(本文入力のためには改行が必要)
mail body

.
(ドットで本文を終了させる)
quit # 接続を切断

他のコマンド

rset # メール転送を中止し、それまでに設定した情報をクリアします
noop # 何もしません。タイムアウトにならないよう接続を維持したいときに使います。
1,995 views

ドメインのDNS逆引きが出来るか確認する方法

逆引きできるか確認するには

nslookupコマンドでIPアドレスを調べる

nslookup xxx.xxx.xxx.xxx

結果

** server can't find xxx.xxx.xxx.xxx.in-addr.arpa: NXDOMAIN

などと表示されたら逆引きができないということ

逆引きできるようにするには 続きを読む…»

12,509 views

Apache Basic認証パスワード生成

<?php
$id = "test";
$password = "test";
$sal = substr($id, 0, 2);
$password_crypted = crypt($password, $sal);
?>

続きを読む…»

1,316 views