ksh/bash は sed を使用して cat file|sed コマンドを使用してファイル形式を指定します。

ksh/bash は sed を使用して cat file|sed コマンドを使用してファイル形式を指定します。

ファイルの内容の色を条件付きに変更しようとしています。私のファイルは次のとおりです

A  B  C  D
Value  Value  Value  Value  
Value  Value  Value  Value  
Value  Value  Value  Value  
Value  Value  Value  Value  

私のコマンドはcat file4 | sed "s,.*,${esc}[33m&${esc}[0m,"であり、論理は次のとおりです。

  1. ファイルを分類し、sedコマンドを使用してANSIカラーコードを使用してコンテンツの色を編集します。

ただし、このファイルを実行すると、生成されたファイルは期待どおりに表示されません。

[33mA  B  C  D[0m
[33mValue  Value  Value  Value  [0m
[33mValue  Value  Value  Value  [0m
[33mValue  Value  Value  Value  [0m
[33mValue  Value  Value  Value  [0m

希望の出力:

  • フィールドAは赤でなければなりません。
  • フィールドCは青でなければなりません。
  • フィールドDは黄色でなければなりません。
  • フィールドBは緑でなければなりません。

ベストアンサー1

まず、これUUOC猫の無駄な使用)。catここで使用する理由はありません。sedそうでない場合でも、ファイルからstdinをリダイレクトすることはパイピングと同じです。

esc=$(echo -e '\e')
sed "s,\(.*\)  \(.*\)  \(.*\)  \(.*\),$esc[31m\1  $esc[34m\2  $esc[33m\3  $esc[32m\4$esc[m," file4

これは、もともと指定したフィールド間に2つのスペースがあると想定していますが、それに応じて編集が行われたようです。

なぜ元の方法(1行のすべてのテキストと一致し、2つのエスケープコード(黄色)の間にラップすると、複数の色が提供されると思うのかわかりません)。

おすすめ記事