shell (e)grep正则表达式问题

要检查的是字符串$2是否为文本文件的一行,意思即^$2$,但是加单引号的话$2变成了$2两个字符本身,加双引号句首句末又变成了符号。还要注意$2里面可能有空格。。。求写法。

第1个回答  2012-11-11
楼主且看我实验

[root@master ~]# cat -A temp
$ 2$
$ 2$
$2 $
$2$
$2 aaa$
$^I2$
[root@master ~]# grep -n ^\$2$ temp
4:$2
-----------------------
说明:
cat -A 显示文件的所有控制字符,在每行结束处显示"$",将跳格字符(Tab键)显示为^I, 给你详解一下我每一行的字符如下,
第一行:空格$空格2
第二行:$空格2
第三行:$2空格
第四行:$2
第五行:$2空格空格aaa
第六行:$Tab键2
然后grep -n 打印输出行的行数. ^\$2$, "\" ,去掉$的元字符额特殊解释. 然后^匹配开始,$匹配技结束,就得到第四行则是你想要的字符串$2单独为一行的输出
第2个回答  2012-11-11
单引号和双引号可以连在一起用:
>a=2
>echo '$a='"$a"
$a=2
你要注意$2的内容会被作为正则表达式解释,他不能含有正则表达式元字符。
grep -P '^\s+'"$2"'$' file追问

-P 就是能用\s+的意思么?
一般的说grep和egrep就差这个-P?

追答

不是啊,你到网上一搜就知道了。-P 表示使用perl 正则语法。对应的还有 -E -G.egrep grep 是两个不同的程序。都用来匹配文件但是选项不同。

本回答被提问者和网友采纳
相似回答