答え1
grepをgrepに接続する必要はありません。 (これはほとんど常に非効率的で間違ったアプローチを取っているというシグナルです。 sed
それだけで作業に十分でしょう。or.or awk
)perl
、それはsudo su root cat
ただ言わないことです。
この試み:
$ sudo sed -n -E -e '/sshd.*authentication failure/{s/^.*rhost=([0-9.]+).*/\1/p}' \
/media/sf_partageAuth/auth.log > /mnt/analyse/traitement/cueillette.txt
「認証失敗」に一致するすべての行について(注、いいえ「確実性フィリピン諸島cation"), このsed
スクリプトは行の先頭からまでのすべての項目rhost=
と IP アドレスの後のすべての項目を削除し、その行を印刷します。
正規表現を拡張するにはsed
オプションを使用するので、エスケープなしで機能します。-E
()
+
sed
コマンドがrootとして実行されても、sudo
出力リダイレクトはそうではありません。これは、ルートではなく元のシェルで行われます。出力ファイルへの書き込みにroot権限も必要な場合はrunを使用してくださいtee
。sudo
たとえば、次のようになります。
$ sudo sed -n -E -e '/sshd.*authentication failure/{s/^.*rhost=([0-9.]+).*/\1/p}' \
/media/sf_partageAuth/auth.log |
sudo tee /mnt/analyse/traitement/cueillette.txt > /dev/null