我的文件包含mmddyyyy
格式的日期。
文件cotents如下:
05192014
10212014
10222014
11232014
12242014
现在我想打印具有第10个月或第11个月和2014年的日期,或者也可以是从01到11的月份之间的日期。
一个月和一年这个命令工作正常:
cat filename | sed -n '/10/,/2014/p'
以上命令打印:
10212014
10222014
一切都好!
但如果我希望日期为10或11个月,我会按以下方式进行:
cat filename | sed -n '/1[0-1]/,/2014/p'
但是上面的命令会打印所有日期。有什么出路吗?所以我可以在我的第一个模式中放置一个范围。
此外,我应该能够在指定范围内的月份时获取日期,例如:
打印月份大于等于01且小于等于11且2014年的所有日期。
然后输出应为:
05192014
10212014
10222014
11232014
答案 0 :(得分:2)
我想你想要这个:
$ sed -n '/^1[01].*2014$/p' file
10212014
10222014
11232014
^1[01].*2014$
表示:字符串以1
开头,后跟0
或1
,然后是一串以2014
结尾的字符串。
如果您只想查看MMDDYYYY
格式的日期,那么您可以使用^1[01].*2014$/
代替^1[01]..2014$
而不是^
。使用$
和hello11112014bye
可以避免匹配cat ... | sed
等行。
另外,请注意,不需要sed ... file
。 sed -n '/10/,/2014/p' file
就足够了。
请注意,您当前的命令没有达到预期的效果:10
会将包含2014
的文件中的所有文件打印到包含$ cat a
05192014
10212014
asdfad
10222014
11232014
12242014
$ sed -n '/10/,/2014/p' a
10212014
asdfad
10222014
的文件中,因此会显示介于两者之间的所有文件。参见:
$ sed -rn '/^(0[1-9]|1[01]).*2014$/p' file
05192014
10212014
10222014
11232014
此外,我应该能够在指定范围的月份时获取日期 示例:打印月份大于等于01且更小的所有日期 超过2014年和2014年。
{{1}}
答案 1 :(得分:1)
sed -n /1[01]..2014/p file
输出:
10212014
10222014
11232014
答案 2 :(得分:1)
grep '1[01]..2014' filename
将产生输出
10212014
10222014
11232014
答案 3 :(得分:1)
它也可以是从01到11之间的月份之间的日期
$ grep -E '^(0[1-9]|1[01])..2014$' file
05192014
10212014
10222014
11232014