tail
withの出力色をどのように指定しますかsed
?
echo "`tput setaf 1`foo`tput op`"
期待どおりに動作
echo "foo" | sed -e 's/(foo)/`tput setaf 1`\0`tput op`/g'
しかしそうではありません。
私がここで何を見逃しているのでしょうか?
答え1
必ずそうでしょうかsed
?
echo "foo bar baz" | grep --color=auto "bar"
上記の内容はbar
デフォルトで赤で強調表示されます。マニュアルページには、環境変数で使用する色を選択できることが示されていますGREP_COLORS
。
すべての行を印刷して強調表示するには、次の手順を実行しますbar
。
echo "foo bar baz" | grep -E --color=auto "^|bar"
答え2
echoコマンドのバックティック ``はプロセスを生成し、その出力をechoコマンドラインに置き換えます。たとえば、次のように表示できます。
echo "`tput setaf 1`" | hexdump -C
00000000 1b 5b 33 31 6d 0a |.[31m.|
"..."
これは、echoに転送される前にコンテンツが拡張されるために機能します。
使用するsedコマンドはすべてを包み込み、'
拡張なしでsedに渡し、sedはそれらをすべてリテラルテキストとして扱います。
sedコマンドの周りに ""を追加すると、この問題を解決できます。
echo "foo" | sed -e "s/\(foo\)/`tput setaf 1`\1`tput op`/g"
sed コマンドにも問題があります。エスケープして記憶されたパターンで表現する必要があります(
。私は私がいつも使った最初の暗記パターンを決して使用しませんでした。)
\(
\)
\0
\1