tacコマンドは、ファイルの内容を逆順で表示することができます。
また、オプションを用いれば、ファイルのすべての文字を逆順で表示することができます。
目次
tacコマンドとは
tacコマンドとは、catコマンドとはファイルの内容を逆順で表示するという意味で逆のコマンドです。
つまり、catコマンドがファイルの内容を上から下へ表示してくれるに対して、tacコマンドはファイルの内容を下から上へ表示します。
また、オプションを用いるとすべての文字に対して、逆順で表示させることもできます。
tacコマンドの構文
1 |
tac オプション ファイル |
オプション:0個以上のオプションをつけることができます。
入力ファイル:0個以上の入力ファイルを指定できます。入力ファイルがない、または「-」ならば、標準入力が指定されます。
tacコマンドのオプション
区切り文字を変更
(-sオプション)
tacコマンドのデフォルトの区切り文字は、改行です。
tacコマンドは、ファイルを表示するときに、区切り文字が現れる順番とは逆順で表示します。
つまり、オプションがない状態でtacコマンドを実行すると、改行文字が現れるのと逆順で表示することでファイルの内容を逆順で表示することができます。
-sオプションで、区切り文字を変更することで表示方法を変更することができます。
コマンド例
1 |
tac -s 'l' tacopt.txt |
tacopt.txt
1 2 3 |
apple apple apple apple apple onion apple apple yuzu |
実行結果
1 2 3 4 |
e yuzu e apple onion apple apple apple apple applappl |
これは、tacopt.txtが「l」を区切り文字として、8つの部分に分けられます。
列挙すると、
「appl」
「e appl」
「e appl」
「e\nappl」
「e appl」
「e onion\nappl」
「e appl」
「e yuzu\n」
となります。また、明示的に改行文字は\nで表しています。
そして、この列挙をしたものを逆順に読むと、実行結果のようになるでしょう。もちろん、実行結果の最後の部分は、改行文字も表示されません。
区切り文字に正規表現を使用
(-rオプション)
-rオプションは区切り文字に正規表現を用いることができます。
区切り文字を手前に表示
(-bオプション)
-bオプションは、区切り文字を手前に表示します。
デフォルトでは、区切り文字は最後になるように分けられます。
-bオプションをつけると、区切り文字が最初に来るように分けられます。
コマンド例
1 |
tac -b -s 'l' tacopt.txt |
tacopt.txt
1 2 3 |
apple apple apple apple apple onion apple apple yuzu |
実行結果
1 2 3 4 |
le yuzu le apple onion apple apple apple apple appapp |
これは、以下のように分けられます。また、明示的に改行文字は\nで表しています。
「app」
「le app」
「le app」
「le\napp」
「le app」
「le onion\napp」
「le app」
「le yuzu\n」
分け方を見ると、区切り文字である「l」が最初に来るように分けられます。
また、-sオプションの例を見ると最後に区切り文字である「l」が来るように分けられています。
この列挙をしたものを逆順に読むと、実行結果のようになります。
tacコマンドの利用例
ファイルの内容を逆順で表示
tacコマンドは普通に用いるとファイルの内容を逆順で表示します。
コマンド例
1 |
tac test.txt |
test.txt
1 2 3 |
テキストファイルです テスト用です |
実行結果
1 2 3 |
テスト用です テキストファイルです |
ファイルの文字を逆順で表示
tacコマンドは区切り文字に正規表現を使用可能にする-rオプションと区切り文字を変更する-sオプションを組み合わせることで、ファイルの文字を逆順で表示することができる。
コマンド例
1 |
tac -r -s 'a\[^a]' test.txt |
test.txt
1 2 3 |
テキストファイルです テスト用です |
実行結果
1 2 3 4 |
すで用トステ すでルイァフトスキテ |
具体的には、aもしくはa以外の文字のどちらかにマッチするという意味になり、つまり、任意の文字にマッチする場合となります。
また、この正規表現は「b\|[^b]」でも「c\|[^c]」でも同じ意味になります。
「\|」は正規表現「|」(OR)をエスケープシーケンスしたものです。
参考
外部リンクGnu Coreutils
外部リンクGnu Coreutils日本語版