Bash 機能は特定の行を青色で印刷します。

Bash 機能は特定の行を青色で印刷します。

次の機能を理解するのに苦労しています。で始まる-か、またはを使用して{-線を色付けする必要がありますblue。一致しない行を印刷し続けるにはどうすればよいですか?

kls ()
 {
  rst='tput sgr0'
  ctp='tput bold; tput setaf 39'
  sed -E "s/^ *\{?-.*/${ctp}; printf '%s' '&';${rst}/e" <<< "$@"
 }

答え1

コードの2つの変数にはrstシェルコマンドが含まれています。代替コマンドのGNU呼び出しから安全でないオプションを削除できるctpため、これらのコマンドの出力を含める方が良いでしょう。/esed

kls () {
    local ctp="$( tput bold; tput setaf 39 )"
    local rst="$( tput sgr0 )"
    sed -E "s/^ *\{?-.*/${ctp}&${rst}/" <<< "$@"
}

この質問はどうなるか尋ねるようです。避ける一致しない行を印刷します。この場合、編集スクリプトの最後にある各行のデフォルト出力を無効にする-nwithオプションを使用してこれを行います。sedその後、/p置換コマンドにオプションを追加すると、置き換えられた修正行が出力されます(正規表現と一致しない行は出力されません)。

kls () {
    local ctp="$( tput bold; tput setaf 39 )"
    local rst="$( tput sgr0 )"
    sed -E -n "s/^ *\{?-.*/${ctp}&${rst}/p" <<< "$@"
}

フィルタのようにするには、リダイレクトを次の場所に配置しますsed

kls () {
    local ctp="$( tput bold; tput setaf 39 )"
    local rst="$( tput sgr0 )"
    sed -E -n "s/^ *\{?-.*/${ctp}&${rst}/p"
}

あなたはそれを使用することができます

printf '%s\n' "some" "strings" | kls

または

kls <some-file

または

some-general-command | kls

関連情報