複数のファイル内の文字列の置換

UNIXにおいて、ファイル内の文字列の置換にはsedコマンドを利用することができます。例えば、fruits.txtファイル内の文字列AppleをOrangeに置換するには、以下のように行います。

$ sed -i".bkp" -e "s/Apple/Orange/g" fruits.txt

ここで、パラメータ「-i」は対象のファイルを直接書き換えることを指定していますが、直後に文字列を指定することで、その文字列がファイル名の後ろに付いたバックアップファイル(fruits.txt.bkp)を作成させています。

複数のファイルに対して同時に処理を行いたい場合は、findとxargsコマンドをsedと組み合わせます。findはファイルを検索するためのコマンドで、xargsは標準入力から渡された値を引数として任意のコマンドを実行するためのコマンドです。例えば、カレントディレクトリに存在する全てのファイル中のAppleをOrangeに置換するには、以下のように行います。

$ find . -maxdepth 1 -type f | xargs sed -i".bkp" -e "s/Apple/Orange/g"

 

プロンプトの表示の変更

表示内容の変更

PS1という環境変数の値を変更することで、Bashのプロンプトの表示を変更することができます。例えば

[user@host:/path/to/current_directory]$

という表示にしたければ

$ export PS1="[\u@\H:\w]$ "

と設定します。ただ、毎回このコマンドを入力するのは大変なので、ホームディレクトリにある.bashrcに書き込んで、ログイン時に自動的に設定されるようにしましょう。

$ vim ~/.bashrc

export PS1="[\u@\H:\w]$ "

PS1の設定値の中で使用できる特殊文字は以下のとおりです。

\a ASCIIのベル文字 (07)
\d “曜日 月 日” という形式の日付 (例: “Tue May 26”)
\D{format} formatstrftime(3)に渡され、その結果がプロンプト文字列に挿入される。formatが空の場合には、ロケールで指定された時刻表記になる。(ブレースは必要)
\e ASCIIのエスケープ文字 (033)
\h ホスト名のうち最初の「.」までの部分
\H ホスト名
\j シェルによって現在管理されているジョブの数
\l シェルの端末デバイスのベース名
\n 改行
\r 復帰
 \s シェルの名前。つまり$0のベース名 (最後のスラッシュ以降の部分)
 \t 24 時間制のHH:MM:SS形式の現在の時刻
\T 12 時間制のHH:MM:SS形式の現在の時刻
\@ 12 時間制のam/pm形式の現在の時刻
\A 12 時間制のHH:MM形式の現在の時刻
\u 現在のユーザのユーザ名
\v bashのバージョン (例: 2.00)
\V bashのリリース。バージョンにパッチレベルを加えたもの (例 : 2.00.0)
\w 現在の作業ディレクトリ。$HOMEの部分はチルダに短縮される。(PROMPT_DIRTRIMの値が適用される。)
\W 現在の作業ディレクトリのベース名$HOMEの部分はチルダに短縮される。
\! このコマンドの履歴番号
\# このコマンドのコマンド番号
\$ 実効UIDが0の場合に#、それ以外の場合は$
\nnn 8進数nnnに対応する文字
\\ バックスラッシュ
\[ 非表示文字のシーケンスの開始。これを使うと、プロンプト中に端末の制御シーケンスを埋め込むことができる。
\] 非表示文字のシーケンスを終了する。

色の変更

また、色を変えることもできます。色を変えたい文字列を\[\e[<色>m\]と[\e[m\]で囲みます。例えば、ユーザ名を赤くしたい場合は、

$ export PS1="[\[\e[31m\]\u\[\e[m\]@\H:\w]$ "

とします。色はANSIカラーシーケンスに従います。

色のパターン

30
31
32
33 黄色
34
35
36 水色
37

 

また、色の前か後ろに、セミコロンで区切って一桁の数字を入れることで、文字の装飾を指定することができます。

$ export PS1="[\[\e[31;1m\]\u\[\e[m\]@\H:\w]$ "

装飾のパターン

0 なし
1 太字
4 下線
5 点滅
7 反転

 

私のお気に入りは次の設定です。

$ export PS1="[\[\e[01;31m\]\u\[\e[m\]@\[\e[01;33m\]\H\[\e[m\]:\[\e[01;36m\]\w\[\e[m\]]$ "

この場合、プロンプトはこんな感じになります。ps1

古いファイルの削除

UNIXにおいて、最終更新後一定期間経った古いファイルを削除するには、「find」コマンドを「-exec」パラメータと一緒に利用します。

$ find <Directory> -maxdepth 1 -mtime +<Days> -exec rm -f {} \;

各パラメーターの意味は以下のとおりです。

<Directory> 削除したファイルを含むディレクトリを指定します。
-maxdepth 1 1を設定することで指定したディレクトリ直下のファイルのみを検索の対象にします。
-mtime +<Days> 最終更新日から数えて、指定した日数を経過したファイルを対象にするという指定です。
-exec rm -f {} \; 検索の結果見つかったファイルを削除します。

 

ハッシュの結合

Javascriptでハッシュの結合を行う関数は標準で存在しないようです。hash1にhash2を結合するには、次のようにやります。

var hash1 = {'us': 'USD', 'jp': 'JPY'};
var hash2 = {'cn': 'CNY'};

for (var key in hash2) {
    hash1[key] = hash2[key];
}

 

ログアウトしてもバックグラウンドでジョブを継続させる

ログアウトしてもジョブを継続させるには、HUPシグナルを無視するために、nohupコマンドを利用します。

$ nohup <Command>

さらに、 バックグラウンドで実行するためには、コマンドの末尾に&を付けます。

$ nohup <Command> &

コマンドの標準出力と標準エラーは、コマンドを実行したディレクトリに作成されるnohup.outというファイルに出力されます。これを出力させないようにするには、標準エラーを標準出力にリダイレクトさせ、標準出力を/dev/nullにリダイレクトさせます。

$ nohup <Command> > /dev/null 2>&1 &

この形で利用する場合が多いかと思います。

Top