我正在尝试打印只有一个t或只有一个T的行,其他都可以。 IE中没有没有t的行,没有具有2个或更多t的行,也没有具有1 T和1 t的行。
我正在尝试:
egrep '[tT]{1,1}$' filename
这显示了以下几行:
nopqrstuvwxyz
letters (this line is the one that should not be here)
The price is *$2*
one two three (this line should not be here either)
ONE TWO
THREE
这些是文件中所有带有t或T的行。我应该怎么做?
答案 0 :(得分:3)
$ cat ip.txt
foobaz
nopqrstuvwxyz
letters
The price is *$2*
one two three
ONE TWO
THREE
1234
$ grep -ix '[^t]*t[^t]*' ip.txt
nopqrstuvwxyz
The price is *$2*
ONE TWO
THREE
-i
忽略大小写-x
仅匹配整行
grep
匹配行中的任何地方-x
,则需要grep -i '^[^t]*t[^t]*$'
[^t]*
除t
以外的任何其他字符(由于有-i
选项,T
也将不匹配)
您也可以在此处使用awk
$ awk -F'[tT]' 'NF==2' ip.txt
nopqrstuvwxyz
The price is *$2*
ONE TWO
THREE
-F'[tT]'
指定t
或T
作为字段分隔符NF==2
如果行包含两个字段,即行中有一个t
或T
答案 1 :(得分:0)
如果您正在考虑使用Perl,则可以使用以下功能
> cat ip.txt
foobaz
nopqrstuvwxyz
letters
The price is *$2*
one two three
ONE TWO
THREE
1234
> perl -ne ' $x++ for(/t/ig);print if $x==1 ; $x=0 ' ip.txt
nopqrstuvwxyz
The price is *$2*
ONE TWO
THREE
>
如果您需要精确匹配2个grep,只需将条件更改为$ x == 2。