6

次のようなテキスト行を取得しようとしています

    13) Check for orphaned Path entries

に変更します(bashカラーコードで出力を色付けし、画面に表示しないようにします)

\033[32m*\033[0m Check for orphaned Path entries

アスタリスクをより目立たせるためにbashカラーコードを使用して色付けします。カラーコードを置換テキストへの参照と見なすため、カラーコードを正しく処理しないことを除いて、ほとんどのことを行う sed コマンドがあります。

私がこれまでに持っているもの:

sed "s/ *13) \(.*\)/ \033[32m*\033[0m \1/"

最初に指定した文字列で実行すると、次の出力が生成されます。

   13) Check for orphaned Path entries33[32m*  13) Check for orphaned Path entries33[0m Check for orphaned Path entries

\033 の \0 を元の文字列に置き換えています。置換文字列でバックスラッシュを 2 倍にしても違いはありません。私はまだ同じ出力テキストを取得します。

bashカラーエスケープをsed置換式に挿入するにはどうすればよいですか?

4

6 に答える 6

9

使用しているsedは 8 進数を理解していない可能性がありますが、16 進数は理解できる可能性があります。このバージョンを試して、動作するかどうかを確認してください (\x1bの代わりに使用\033):

sed "s/ *13) \(.*\)/ \x1b[32m*\x1b[0m \1/"
于 2009-06-30T16:19:27.363 に答える
8

あなたの '\033' は実際には単一のESC(エスケープ) 文字です。これを出力するには、次のいずれかを使用できます。

  • \o033
  • \d027
  • \x1B
  • \c[為にCTRL-[
于 2009-06-30T16:25:42.980 に答える
3

置換文字列でバックスラッシュを 2 倍にし、かつ sed 式を二重引用符ではなく単一引用符で囲みます。

sed 's/ *13) \(.*\)/ \\033[32m*\\033[0m \1/'

これにより、シェルが sed の動作に干渉するのを防ぎます。

~~~~~~~

アップデート:

スクリプトを使用して色をきれいに表現する:

colorize.sh

#!/bin/sh

HIGHLIGHT=`echo -e '\033[32m'`
NORMAL=`echo -e '\033[0m'`

sed "s/ *13) \(.*\)/ $HIGHLIGHT*$NORMAL \1/" yourinputtext
于 2009-06-30T15:35:47.847 に答える
2

私は同じ問題を抱えていて、この方法で解決しました。

コードを変更してみることができます:

sed "s/ *13) \(.*\)/ \033[32m*\033[0m \1/"

これに:

sed "s/ *13) \(.*\)/ $(echo '\033[32m')*$(echo '\033[0m') \1/"

基本的な考え方は、'echo' を使用してエスケープ コマンドを出力することです。それは私のために働いた、

于 2012-11-08T16:35:32.760 に答える
-1

これを試して :

sed  "s/ *13) \(.*\)/ \\\\033 \1/"

つまり、スラッシュ-スラッシュ-スラッシュ-スラッシュ-033

于 2009-06-30T15:46:49.073 に答える