在两个模式之间打印字符串,但第一个模式是一个范围

时间:2014-10-08 09:38:32

标签: date sed

我的文件包含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

4 个答案:

答案 0 :(得分:2)

我想你想要这个:

$ sed -n '/^1[01].*2014$/p' file
10212014
10222014
11232014

^1[01].*2014$表示:字符串以1开头,后跟01,然后是一串以2014结尾的字符串。

如果您只想查看MMDDYYYY格式的日期,那么您可以使用^1[01].*2014$/代替^1[01]..2014$而不是^。使用$hello11112014bye可以避免匹配cat ... | sed等行。

另外,请注意,不需要sed ... filesed -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