Linux 使用grep查找并写入具有条件的特定行

Linux 使用grep查找并写入具有条件的特定行,linux,shell,Linux,Shell,我不熟悉shell命令。 我需要做一些先进的搜索脚本,我不知道怎么做 我需要在我的计算机日志文件中查找包含“str1”而不包含“str2”的行,按大于或等于某个给定日期的日期排序,然后将结果写入一个文件,进程在后台运行 以更正式的方式,我想这样做: new\u process(write(from*log*其中log\u line包含“Str1”和&log\u line不包含“str2”订单日期具有日期=%Date%)到read.txt) 谢谢大家! 你可能让事情变得更难了grep'str1''

我不熟悉shell命令。 我需要做一些先进的搜索脚本,我不知道怎么做

我需要在我的计算机日志文件中查找包含“str1”而不包含“str2”的行,按大于或等于某个给定日期的日期排序,然后将结果写入一个文件,进程在后台运行

以更正式的方式,我想这样做:

new\u process
write
from
*log*
其中
log\u line
包含
“Str1”和&log\u line
不包含
“str2”
订单日期
具有日期=%Date%)
read.txt)


谢谢大家!

你可能让事情变得更难了
grep'str1''$logfile“| grep-v'str2'
将查找包含
str1
而非
str2
的所有行。对于给定的日期,您需要触摸一个文件,该文件的
mod
时间设置为您要测量的日期。然后,在读取-r fname时,使用列表提供一个
;执行
循环并测试
[“$fname”-nt“testfilename”]
并将满足该条件的文件写入新文件

您的最终脚本流如下所示:

newname="${1:-newfile.txt}"
touch -d "date string" testfilename
grep "$str1" "$logfile" | grep -v "str2" | while read -r fname; do
    [ "$fname" -nt "testfilename" ] && printf "%s\n" "$fname" > "$newname"
done
rm testfilename  ## clean up
还有其他方法可以实现这一点,但这是一种相当标准的方法。如果您还有其他问题,请告诉我