tac
を使用して、テキストファイルを1文字ずつ反転させたい。 coreutilsの情報ページで、次のような例を見つけました。#ファイルを1文字ずつ反転するtac -r -s 'x\|[^x]'
ただし、tac -r -s
を実行すると、ファイルを印刷する代わりに標準入力が開くようです。 'x\|[^x]'
とはどういう意味ですか?どうすればよいですか?
また、tac [file]
とtac -r [file]
の出力は同じであり、cat [file]
と同じであることに注意しました。それでも、文字の逆で文字を理解することはできません。
tac
を使用してファイルを文字ごとに反転するには、次を使用します。
tac -r -s 'x\|[^x]'
# Reverse a file character by character. tac -r -s 'x\|[^x]'
-r
により、セパレータは正規表現として扱われます 。 -s SEP
はSEP
を区切り文字として使用します 。 x\|[^x]
は、すべての文字(x
であるものと、x
ではないもの)に一致する正規表現です。
$ cat testfile
abc
def
ghi
$ tac -r -s 'x\|[^x]' testfile
ihg
fed
cba%
$
file
に1行しかない場合を除いて、tac file
はcat file
と同じではありません。 tac -r file
はtac file
と同じです。これは、デフォルトの区切り文字が\n
であるためです。これは、正規表現として扱われる場合と同じでない場合と同じです。
LF文字 (mosvyのコメントを参照)を気にしない場合は、tac -r -s 'x\|[^x]'
ではなくrev
を使用し、必要に応じてtac
にパイプする方がはるかに効率的です。
$ cat testfile
abc
def
ghi
$ rev testfile
cba
fed
ihg
$ rev testfile|tac
ihg
fed
cba
このソリューションは、正規表現によって処理速度が大幅に低下する傾向があるため、tac -r -s 'x\|[^x]'
よりもはるかに安価です。