tac--前の説明

tac--前の説明

-b、--以前

区切り文字は、ファイルの前のレコードの先頭に追加されます。

次の出力がわかりません。

$ echo -e "Hello\nNew\nWorld\n!" > file
$ tac file
!
World
New
Hello
$ tac -b file


!
World
NewHello

Newとの間に改行文字がないのはなぜですかHello

答え1

tacレコードと区切り文字を使用してください。付属、デフォルトは対応するレコードの後です。これは、区切り文字の分離を実行するAWKなどの他のレコードベースのツールと比較して、わずかに直感的にずれます。

の場合、-b改行文字が追加されたレコードは次のとおりです(元の順序で)。

  • Hello
  • \nNew
  • \nWorld
  • \n!
  • \n

逆方向出力は

\n\n!\nWorld\nNewHello

これはあなたが見る出力に対応します。

それ以外の場合、-bレコードと追加された改行は次のようになります。

  • Hello\n
  • New\n
  • World\n
  • !\n

逆方向出力は

!\nWorld\nNew\nHello\n

答え2

私にとっては、これは奇妙に見えます。部分的には、tacそれがどのように機能するかが少し反直感的だからです。明確に見える区切り記号であるカンマを使用します。

次のコマンドの結果を見たいです。

% echo -ne 'A,B,C' | tac -s,

まあ、AはBとは別で、BはCとは別だと思います。だから(私の結論は)逆方向に印刷するとC,B,A。確認してみましょう。ああ、別の方法で印刷されます。

% echo -ne 'A,B,C' | tac -s,
CB,A,

tacもともと区切り記号があったバーがあると結論付けることができます。Aその後もまだありますが、B存在しCない場合はそのまま印刷されます。

tacこの時間を持って走ると-bどうなりますか?

% echo -ne 'A,B,C' | tac -bs,
,C,BA

次のように動作するようです-b。区切り文字が見つかるまで入力を逆に繰り返します。印刷されたことがわかりました:

,。次に、検索中にスキップされたテキストを印刷します。

C。その後、ループを繰り返します。

,B。残りの区切り文字がないため、残りの部分だけが印刷されます。

A

NewとHelloの間に改行文字がないのはなぜですか?

上記の説明によれば、New改行文字が前に付くので新しい行に表示されますが、Helloそうでないため、そのまま印刷されます。

関連情報