bash - 在 bash 中转义斜杠 (awk)

标签 bash shell date awk sed

试图从 Apache 日志文件中获取一行和所有后续行我希望简化以下内容:

# Convert epoch to format used in log file
gtime=$(date -d @$etime +"%d/%b/%Y:%T")  # "17/Nov/2015:16:36:45"
# Escape the slashes
g_tim=$(echo $gtime | sed 's/\//\\\//g') # "17\/Nov\/2015:16:36:45"
# Grab 
lines=$(awk '/$g_tim/,0' access.log)

如果我不必为此使用两个变量会更好,而且我确定我正在犯其他各种错误。

日志文件的示例行:

djerk.nl:80 79.134.133.108 - - [17/Nov/2015:18:51:52 +0100] "GET /wordpress/2015/null HTTP/1.1" 103 16544 "http://www.djerk.nl/wordpress/2015/cisco-lacp-config-for-aruba-ap" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36"
djerk.nl:80 92.27.44.117 - - [17/Nov/2015:18:52:28 +0100] "GET /djerk_nl.pac HTTP/1.1" 403 1147 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36"

最佳答案

您想打印从匹配 17/Nov/2015:16:36:45 的行到结尾的所有内容。那么,为什么不使用这种语法呢?

awk '$0 ~ /pattern/ {f=1} f' file

这会在第一次看到该模式时设置一个标志。从那一刻起,f 条件为 True,因此所有行都将打印到文件末尾。

在你的情况下,

awk -v date="$(date -d @$etime +"%d/%b/%Y:%T")" '$0~date {f=1}f' file

关于bash - 在 bash 中转义斜杠 (awk),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33761339/

相关文章:

python - 自动排除网络故障

python - 在写入其标准输入后后台进程

linux - 将 git 命令与 -q 一起使用,但在失败时不会保持安静?

linux - 使用ghostscript转换后如何防止白边

java - 拦截 Shell 命令

php - 在 PHP 中处理在不同时区存储/显示日期的最佳方法?

python - Apache Airflow UI 显示 DAG 导入错误(IndexError : list index out of range) But DAG works fine

linux - 将一个文件附加到另一个文件中的一个衬里,但前提是它尚未被添加

html - 如何将输入类型日期的默认值设置为今天?

python - 如何在 Pandas 中将数据格式更改为 '%Y%m%d'?