Linux備忘録15:エラーも含めたリダイレクト、空白詰め(置換)、文字抽出(ファイルディスプリタ、tr、cut)
個人用備忘録のため、内容や記述に誤りがあったら申し訳ありません。
【エラー出力および標準出力をログファイルに残す】
・エラーと標準出力をそれぞれ別のファイルに記録する場合
# {コマンドもしくはスクリプト} 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