質問1

質問1

質問1

私は利用できる

grep -o '^[[:alpha:]_]\+[[:blank:]]*([[:blank:]]*)' /etc/rc.d/init.d/functions

次の出力を取得します。

systemctl_redirect ()
checkpid()
__kill_pids_term_kill_checkpids()
__kill_pids_term_kill()
__pids_var_run()
__pids_pidof()
daemon()
killproc()
pidfileofproc()
pidofproc()
status()
echo_success()
echo_failure()
echo_passed()
echo_warning()
update_boot_stage()
success()
failure()
passed()
warning()
action()
strstr()
is_ignored_file()
is_true()
is_false()
apply_sysctl()

そして、何度も一致したかも知りたいので-cオプションを使いましたが、今回は を得れば一致し26た項目と個数を比較できます。grep 組み込みオプション?そうでなければどうでしょうか?

質問2

質問1の答えはGithubで見つけました。

grep -o '^[[:alpha:]_]\+[[:blank:]]*([[:blank:]]*)' /etc/rc.d/init.d/functions \
| tee >(echo -e "\n`wc -l` matched.")

しかし、出力はしばしば非常に奇妙です。新しい後の出力です。シェルプロンプトなぜ?

新しいシェルプロンプト後の出力

ベストアンサー1

いつでも次のことができます。

grep -o ... | awk '{print};END{if (NR) print "\n" NR " matched."}'

または、すべての操作を実行するには、次の手順を実行します(GNUismsを使用してawkこれを回避することもできます)。-o\+

awk 'match($0, /^[[:alpha:]_]+[[:blank:]]*\([[:blank:]]*\)/) {
       print substr($0, RSTART, RLENGTH)
       n++
     }
     END{if (n) print "\n" n " matched.")'

またはperl:

perl -lne 'for (/^\w+\h*\(\h*\)/g) {print; $n++}
           END {print "\n$n matched." if $n}'

(この場合は\wASCII文字に制限されています。または(some)メソッドのように、-Mopen=localeロケールに従って文字スクリプトに文字を含めるには、aを追加してください。)grepawkawk

これは、問題2に関連してプロセスの置き換えから開始されたコマンドが待機しないため、この問題が発生するためですbashzshバラよりプロセス交換出力が故障しました。詳細については。

おすすめ記事