如何grep特定格式

如何grep特定格式

我有一个 .txt 文件,其中包含以下字符串。

ANEW.0000+0530-0015+0530_NEW
ANEW.0000+0530-0100+0530_NEW
ANEW.0045+0530-0100+0530_NEW
ANEW.0100+0530-0115+0530_NEW
ANEW.0100+0530-0200+0530_NEW
ANEW.0145+0530-0200+0530_NEW
ANEW.0200+0530-0215+0530_NEW
ANEW.0200+0530-0300+0530_NEW
ANEW.0245+0530-0300+0530_NEW
ANEW.0300+0530-0315+0530_NEW
ANEW.0300+0530-0400+0530_NEW
ANEW.0345+0530-0400+0530_NEW
ANEW.0400+0530-0415+0530_NEW
ANEW.0400+0530-0500+0530_NEW
ANEW.0445+0530-0500+0530_NEW
ANEW.0500+0530-0515+0530_NEW
ANEW.0500+0530-0600+0530_NEW
ANEW.0545+0530-0600+0530_NEW
ANEW.0600+0530-0615+0530_NEW
ANEW.0600+0530-0700+0530_NEW
ANEW.0645+0530-0700+0530_NEW
ANEW.0700+0530-0715+0530_NEW
ANEW.0700+0530-0800+0530_NEW
ANEW.0745+0530-0800+0530_NEW
ANEW.0800+0530-0815+0530_NEW
ANEW.0800+0530-0900+0530_NEW
ANEW.0845+0530-0900+0530_NEW
ANEW.0900+0530-0915+0530_NEW
ANEW.0900+0530-1000+0530_NEW
ANEW.0945+0530-1000+0530_NEW

我需要 grep 所有具有 0400+0530-0500+0530,0500+0530-0600+0530 等的行。有人可以告诉我如何使用 grep 命令来获取所需的输出吗?

我已经尝试如下。但它不起作用。

cat myfile.txt |grep "*00+0530-*00+0530*"

答案1

假设具有四位数字的子字符串是时间戳,您似乎希望排除包含整点一刻或整点一刻的时间戳的行。

为此,请grep像这样使用:

grep -v -e '[0-9][0-9]15' -e '[0-9][0-9]45' file.txt

或者更短,

grep -v '[0-9][0-9][14]5' file.txt

这里的两个正则表达式将匹配一行上任何位置从一刻钟到一刻钟的任何时间戳。如果任一表达式匹配,则该行是不是由于选项而从文件中提取-v,这反转了匹配的含义。

考虑到问题中的输入,该命令的结果是

ANEW.0000+0530-0100+0530_NEW
ANEW.0100+0530-0200+0530_NEW
ANEW.0200+0530-0300+0530_NEW
ANEW.0300+0530-0400+0530_NEW
ANEW.0400+0530-0500+0530_NEW
ANEW.0500+0530-0600+0530_NEW
ANEW.0600+0530-0700+0530_NEW
ANEW.0700+0530-0800+0530_NEW
ANEW.0800+0530-0900+0530_NEW
ANEW.0900+0530-1000+0530_NEW

您的表达式的问题在于*基本正则表达式开头的 a 与文字匹配*,并且您的数据中没有此类字符。此外,0*末尾的 匹配字符0零次或多次,-*中间的 匹配零次或多次破折号。

答案2

尝试这个

grep '00+0530-..00+0530' myfile.txt

.对于任何字符,都会在搜索字符串中插入点 ( )。你不需要cat

相关内容