tac を使用してファイルを文字ごとに逆順にする

tac を使用してファイルを文字ごとに逆順にする

tacテキストファイルを文字ごとに反転するために を使いたいのですが、coreutils の情報ページで、次のような例を見つけました: #Reverse a file character by charactertac -r -s 'x\|[^x]'

しかし、実行すると、tac -r -sファイルを印刷するのではなく、標準入力が開かれるようです。これはどういう'x\|[^x]'意味ですか、また、何をすべきですか?

tac [file]また、 との出力はtac -r [file]同じであり、 と同じであることにも気付きましたcat [file]。それでも、文字ごとに逆順にすることはできません。

答え1

を使用してファイルを文字ごとに反転するにはtac、次のようにします。

tac -r -s 'x\|[^x]'

これは文書化されているinfo tac:

# Reverse a file character by character.
tac -r -s 'x\|[^x]'

-r区切り文字を正規表現として扱う-s SEPSEP区切り文字として使用.は、すべての文字 ( 、 および 以外)x\|[^x]に一致する正規表現です。xx

$ cat testfile
abc
def
ghi
$ tac -r -s 'x\|[^x]' testfile

ihg
fed
cba%
$

tac fileは、 が 1 行しかないcat file場合を除き、と同じではありません。 は、デフォルトの区切り文字が であるため、と同じです。これは、正規表現として扱われる場合とそうでない場合で同じです。filetac -r filetac file\n

答え2

もしあなたが心配していないならLF文字(mosvy のコメントを参照)、 ではなく を使用する方が、必要に応じてにパイプするrevよりもずっと効率的です。tac -r -s 'x\|[^x]'tac

$ cat testfile
abc
def
ghi
$ rev testfile
cba
fed
ihg
$ rev testfile|tac
ihg
fed
cba

tac -r -s 'x\|[^x]'正規表現は処理速度を大幅に低下させる傾向があるため、このソリューションはよりはるかに安価です。

関連情報