Linux備忘録15:エラーも含めたリダイレクト、空白詰め(置換)、文字抽出(ファイルディスプリタ、tr、cut)

Linux(bash)備忘録。

個人用備忘録のため、内容や記述に誤りがあったら申し訳ありません。

 

【エラー出力および標準出力をログファイルに残す】

・エラーと標準出力をそれぞれ別のファイルに記録する場合

# {コマンドもしくはスクリプト}  1> info.txt 2> err.txt

  ※2>がエラー出力

 

・出力した内容を画面に表示する

# {コマンドもしくはスクリプト}  | tee -a  {出力先ファイル}

 ※パイプで標準出力をteeコマンドに渡す。コンソールに表示。さらに[-a]オプションがファイルにリダイレクトする。

 

・エラー、および標準出力をどちらかの出力にマージする

 

 [>&{ファイルディスクリプタ]を使用し、結果をマージ出来る。

 標準出力を標準エラー出力にマージする場合

 ⇒1>&2

 逆に標準エラー出力を標準出力にマージする場合

 ⇒2>&1

 

参考例

# {コマンドもしくはスクリプト}  > logf.txt 2>&1

※エラー出力を標準出力としてマージ ⇒ エラー出力もリダイレクトされる

※ファイルディスクリプタの記載位置に注意 ⇒ リダイレクト式の後に記載

 

 

・エラー出力も標準出力も「全て画面に表示」し、ログに「リダイレクト」する。

# cat tmp 2>&1 | tee -a log.txt

※1>&2と記載した場合はcatコマンドがエラー出力をしないため、何もリダイレクトされない。

 

※注意事項

 標準エラー出力は捨てるべきでない!!!

例:# command > /dev/null 2>&1

  ⇒この場合、エラー結果も破棄されるため原因特定等が困難になる。よくわからないまま利用するのはよくない

 

 

【スペースを詰め、別の文字列に置き換える】

 ※csvファイルを簡単に作成できる。

 

・改行を置き換えて、複数の行を一行で表示する

# echo -e "ringo\nmikan\nsuika" | tr "\n" " "

※置き換え文字として改行コードを指定   

※[echo -e]オプションはバックスラッシュエスケープを有効にする(-Eは無効(デフォルト))

※trコマンドの第2引数は何らかの文字列を指定しなければいけない→結合は出来なかった。

 

・複数あるスぺ―スを","(カンマ)に置き換える

# tr -s " " ","

 

【文字列の一部を切り取る】

 ※[cut]コマンドを使用して文字列を切り取る

 

・3,6,9文字目を切り取る

# echo "123456789" | cut -c 3,6,9
369

 

・5~8文字目を切り取る

# echo "123456789" | cut -c 5-8
5678