答案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
's-E
选项来扩展正则表达式,因此()
和+
无需转义即可工作。
请注意,虽然该sed
命令以 root 用户身份运行sudo
,但输出重定向不是 - 这是在原始非 root shell 中完成的。如果您也需要 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