我有一个包含以下数据的文件。我使用egrep
作为命令
用于扩展正则表达式模式
test
best
+see
done++
feett
ttesingt
我希望输出如下
best
+see
done++
vino+
我使用以下命令输出
egrep 't?' filename.
我们知道?
的含义为零或前一次出现
字符。所以在我的情况下t
是可选的,如果它出现它只有一个t
但我
我把所有的行作为输出。
请告诉我如何获得所需的输出。
答案 0 :(得分:1)
interface FormParent {
forms: Form[];
}
export class Form {
public parent: FormParent;
}
表示:前面的项目是可选的,最多匹配一次。
在您的问题中,?
表示您将其视为可选权利。
同时egrep 't?' filename
(此处egrep '?' filename
为零),因此它将打印总文件输出。
示例:如果您提供t
,则表示第一个字符为egrep 'tt?' filename
,下一个字符't'
为可选零值。所以输出将是
't?'
答案 1 :(得分:0)
简而言之,egrep 't?' filename
本质上意味着"找到我' t'性格,但如果它不存在,那也可以"。
让我们从egrep 't'
开始,这要求找到一个t
个字符。它并不只说一个字符,所以它会匹配"在"," att"," attt"等等。
然后你添加"?"对它 - egrep 't?'
,制作" t"可选的,现在匹配" a"," at"," att"," abc"," xyz"基本上你可以想象的任何其他字符串。
如果是单字符搜索"?"修饰符并没有任何意义,只有在找到更多内容时,例如egrep 'ab?c'
匹配" abc"," acd",但不是" abb"。
如何让您的示例正常工作?
一种简单的方法就是将两个白鹭连在一起:
egrep t filename | egrep -v tt
首先,egrep只为你提供至少包含一个t
的行,第二个会将所有包含两个(或更多)t
个字符的行扔掉。
使用regexp的更复杂的解决方案将如下所示:
egrep '^((^|[^t]+)t($|[^t]+))+$' filename
我个人更喜欢第一个:)