答え1
grep を grep にパイプする必要はありません (これはほとんどの場合、非効率的で誤ったアプローチを取っていることを示しています。 sed
このタスクには だけで十分です。または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 シェルで実行されます。出力ファイルへの書き込みにも root 権限が必要な場合は、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