trコマンドを使用

trコマンドを使用

ファイルにft25行のテキストがあるとします。コマンドを説明します。

tail -15 ft | tr "a" "A" > ft

ftそして、コマンドが実行された後にファイルに何行があるか教えてください。

私はこれがtail -15 ftファイルの最後の15行を取りfttr 'a' 'A'aでもA

> trしかし、なぜファイルのすべての内容が削除されるのかわかりません。

答え1

シェルは最初にリダイレクト(この場合> ft)を設定し、書き込み用に切り取り、開いて残りのftパイプを設定します。tail -15 ft空のファイルをインポートし、空の結果を提供し、tr何も置き換えません。ft結果は空のファイルです。

答え2

あなたは標準出力リダイレクトまさかリダイレクト出力の追加 元のファイルに出力を追加しようとすると、そうは思いません。

~からman bash

出力リダイレクトファイルが存在しない場合は作成され、存在する場合はゼロサイズに切り捨てられます。

リダイレクト出力の追加このように出力をリダイレクトすると、単語拡張のために名前が生成されたファイルがファイル記述子nに追加されるか、nが指定されていない場合は標準出力(ファイル記述子1)に追加するために開かれます。ファイルが存在しない場合は生成されます。

したがって、出力を同じファイルにリダイレクトするように指定すると、出力が切り捨てられ、予想される出力が生成されます。

私が推薦するsedのはredirection

$ tail -15 ft | sed -e 's|a|A|g' > sed_output

答え3

正しいbash表記を使用していません。

Bashでは、ファイルを上書きするには '> file'を使用し、ファイルに追加するには '>> file'を使用する必要があります。代わりに ">>ft" を使用してください。

関連情報