
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]'
# 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%
$
tac file
は、 が 1 行しかないcat file
場合を除き、と同じではありません。 は、デフォルトの区切り文字が であるため、と同じです。これは、正規表現として扱われる場合とそうでない場合で同じです。file
tac -r file
tac 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]'
正規表現は処理速度を大幅に低下させる傾向があるため、このソリューションはよりはるかに安価です。