2016年5月19日木曜日

Linuxでテキストファイルの各行の先頭と末尾に文字を追加する

必要があってテキストの各行の先頭と末尾に文字を追加したので、そのときの手順をまとめる。Linuxでこれをやるにはsedコマンドを使う。sedは 文字列を条件式に従って変換するコマンド 。

使い方は、オプションeに続けて条件式を記述する。置換する場合(追記含む)は、条件式の先頭にsを指定。末尾にgを指定すると、条件にマッチしたものすべてを置換する。書式は、sなどのコマンドや置換前、置換後の文字などを区切り記号で区切って記述する。例では区切り記号としてよく「/」が使われるが、他の記号を使うこともできる。

条件式には正規表現が使える。正規表現で先頭は「^」、末尾は「$」。sample.txtというテキストファイルの各行の先頭に「ABC」を追加するには以下のコマンド。このコマンドでは、「^」が置換する文字(置換対象の文字はないので追加になる)を表し、「ABC」が置換後の文字を表す。
$ sed -e "s/^/ABC/g" sample.txt
結果は標準出力に表示されるので、ファイルに保存するにはリダイレクトを使用する。


今回やりたいことは以下のことなので、これをもとに条件式を求める。

①各行の先頭と末尾に文字を追加
②各行先頭の空白を削除
③空白行を削除

①は以下のコマンドで可能。
$ sed -e "s/^/ABC/g" sample.txt
(sample.txtの各行の先頭に「ABC」を追加)
$ sed -e "s/$/ABC/g" sample.txt
(sample.txtの各行の末尾に「ABC」を追加)

先頭の複数の空白は正規表現で「^\s*」なので、②を行うコマンドは以下のようになる。
$ sed -e "s/^\s*//g" sample.txt

空白行は正規表現で「^$」、そしてsedで削除するコマンドはdなので、③のコマンドは以下のようになる。
$ sed -e "/^$/d" sample.txt

結局、4つの条件式が必要になるが、いちいち4回コマンドを実行するのは面倒なので、1回で済むようにする。sedではeオプションを使って条件式を連結できる。
$ sed -e "s/^\s*//g" -e "/^$/d" -e "s/^/ABC/g" -e "s/$/ABC/g" sample.txt
 

0 件のコメント:

コメントを投稿