我正在使用以下代码
ff=`date +%h" "%Oe`
pd=`date -d'yesterday' +%h" "%Oe`
aa=`date -d'yesterday' +%d\/%m\/%Y`
bb=`date +%d\/%m\/%Y`
for j in `ls -lrt |egrep "$ff|$pd"|awk -F " " '{print $9}'`
do
sed -n "/${aa}/,/${bb}/p" ${j}
done
我从中获取数据的位置看起来像这样
[2015-01-07 18:39:18,212] host123 WARN com.host123 .elf.UserQuest -
Quest/option {o.q.more.paper.osc#0} references unknown dependent
{t.what.form.file.more.action} in application {src-code}. Please
revise.
[2015-01-07 18:39:18,212] host123 WARN com.host123 .elf.UserQuest -
Quest/option {o.q.more.paper.osc#1} references unknown dependent
{t.what.form.file.more.action} in application {src-code}. Please
revise.
[2015-01-07 18:40:34,281] cessor32 ERROR com.host123
.email.DirectMailer - Unable to connect to server {1.1.1.1}:
javax.mail.MessagingException: Could not connect to SMTP host:
1.1.1.1, port: 25, response: 451
at
com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:996)
at
com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:197)
at javax.mail.Service.connect(Service.java:233)
at javax.mail.Service.connect(Service.java:134)
at
com.host123.email.DirectMailer.deliverMessage(DirectMailer.java:191)
执行脚本后出现以下错误
sed: -e expression #1, char 5: unknown command: `0'
请提出建议。
答案 0 :(得分:2)
这里的问题是您在sed命令中使用/
分隔符,同时使用包含相同字符的模式。尝试将sed命令更改为:
sed -n "\#${aa}\#,\#${bb}\#p" "$j"
正如NeronLeVelu在评论中提到的那样(感谢),有必要用反斜杠转义字符。
或者,您可以使用awk打印您的行范围:
awk -v s="$aa" -v e="$bb" '$0 ~ s, $0 ~ e' "$j"
答案 1 :(得分:0)
尝试从ls -lrt |egrep "$ff|$pd"|awk -F " " '{print $9}'
中取出数组然后循环遍历数组?
答案 2 :(得分:0)
问题是bb
的值包含/
s(您的sed
命令也使用/
作为分隔符)。尝试将该行更改为:
sed -n "#${aa}#,#${bb}#p" ${j}
另一个建议是使用较新格式的ff=$(date +%h" "%Oe)