如果我想搜索文件中以日期开头的所有行(例如“5 月 1 日”),我该如何使用 sed 或 awk 来做到这一点?我需要提取这些数据并将其发送到屏幕或文件。谢谢。
答案1
要提取以 开头的行May 1
:
grep "^May 1\b" file
或者:
sed -n '/^May 1\>/p' file
或者:
awk '/^May 1\>/' file
上面两个假设有一个工具,例如 GNU awk 或 sed,支持\>
单词边界正则表达式。单词边界的目的是防止正则表达式匹配,例如May 10
。
更多的
如果您正在寻找五月的任何一天:
grep -E "^May [[:digit:]]{1,2}\b" file
如果您正在寻找任何一个月的任何一天:
grep -E "^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) [[:digit:]]{1,2}\b" file
答案2
printf %s\\n 'Apr 30 aaa' \
'May 1 bbb' \
'Feb 29 ccc' \
'Feb 30 ddd' |
sed -n '/^\(Apr\|Jun\|Sep\|Nov\) \([1-9]\|[12][0-9]\|30\)\>/p
/^\(Jan\|Mar\|Jul\|Aug\|May\|Oct\|Dec\) \([1-9]\|[12][0-9]\|3[01]\)\>/p
/^\(Feb\) \([1-9]\|[12][0-9]\)\>/p'
输出:
Apr 30 aaa
May 1 bbb
Feb 29 ccc