次の機能を理解するのに苦労しています。で始まる-
か、またはを使用して{-
線を色付けする必要がありますblue
。一致しない行を印刷し続けるにはどうすればよいですか?
kls ()
{
rst='tput sgr0'
ctp='tput bold; tput setaf 39'
sed -E "s/^ *\{?-.*/${ctp}; printf '%s' '&';${rst}/e" <<< "$@"
}
答え1
コードの2つの変数にはrst
シェルコマンドが含まれています。代替コマンドのGNU呼び出しから安全でないオプションを削除できるctp
ため、これらのコマンドの出力を含める方が良いでしょう。/e
sed
kls () {
local ctp="$( tput bold; tput setaf 39 )"
local rst="$( tput sgr0 )"
sed -E "s/^ *\{?-.*/${ctp}&${rst}/" <<< "$@"
}
この質問はどうなるか尋ねるようです。避ける一致しない行を印刷します。この場合、編集スクリプトの最後にある各行のデフォルト出力を無効にする-n
withオプションを使用してこれを行います。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