如何使用 sed 或 awk 提取文件中的某些行

如何使用 sed 或 awk 提取文件中的某些行

如果我想搜索文件中以日期开头的所有行(例如“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

相关内容