我有这样的文件
TT;12-11-18;text;abc;def;word
AA;12-11-18;tee;abc;def;gih;word
TA;12-11-18;teet abc;def;word
TT;12-11-18;tdd;abc;def;gih;jkl;word
我想要这样的输出
TT;12-11-18;text;abc;def;word
TA;12-11-18;teet abc;def;word
如果word
出现在日期12-11-18
之后的第5位,我想得到它。如果在此位置位于第六或第七位置之后发现它,我不希望发生这种情况。从日期12-11-18
开始的位置计数
我想试试这个命令
cat file.txt|grep "word" -n1
此命令将打印所有与此模式word
相匹配的事件。我应该如何解决我的问题?
答案 0 :(得分:1)
尝试一下(GNU awk):
awk -F"[; ]" '/12-11-18/ && $6=="word"' file
或sed
一个:
sed -n '/12-11-18;\([^; ]*[; ]\)\{3\}word/p' file
或具有基本相同的正则表达式(不同的转义符)的grep:
grep -E "12-11-18;([^; ]*[; ]){3}word" file
[^; ]
表示不是;
或(空格)的任何字符。
*
表示匹配先前字符/组的任何重复。
-[^; ]*
表示任何不包含;
或空格的长度字符串,^
中的[^; ]
将取反。
[; ]
表示;
或空格,一个出现。
()
是将上述内容归为一类。
{3}
用于匹配原作者/小组的三个重复项。
总体上,([^; ]*[; ]){3}
表示;
/由空格分隔的三个字段,其中包括定界符。
正如@kvantour指出的那样,如果一个地方可能有多个空格,则可能是错误的。
要将多个空格视为一个分隔符,然后:
awk -F"(;| +)" '/12-11-18/ && $6=="word"'
和
grep -E "12-11-18;([^; ]*(;| +)){3}word"
或GNU sed(posix / bsd / osx sed不支持|
):
sed -rn '/12-11-18;([^; ]*(;| +)){3}word/p'