grep查询文本:问一个简单shell问题,将grep的输出赋值给一个变量

时间:2022-03-01 20:10:54

问一个简单shell问题,将grep的输出赋值给一个变量

用grep命令得到的输出赋值给一个变量不成功。



grep命令如下:
代码:
$ grep -c '^abc' file.txt

输出为22,表示file.txt中以abc开头的行的数目。



现在将输出赋值给一个变量:

代码:
myvar=`grep -c '^abc' file.txt`

得到的$myvar值为0,貌似是将命令的返回状态值付给了变量,而不是命令的输出内容。

但是用myvar=`pwd`是没有问题的,输出付给了变量。是不是grep命令有特别注意的地方?谢谢。

 
昵称: michaelyung  时间: 2009-06-26 16:32:00
好象没有问题:

(a=`grep -c ' mysql' /dev/shm/l`; echo $a)

21
 
昵称: openfree  时间: 2009-06-26 20:39:00
引用:
作者: openfree
好象没有问题:

(a=`grep -c ' mysql' /dev/shm/l`; echo $a)

21

刚试了一下,直接匹配没有问题。

用了正则表达的时候就会有这问题,比如

加了-E选项也一样,$a输出为0.



附上我的例子,有一个tex文件,内含有:

代码:
.....
\bibitem
.....

用以下的命令:

代码:
$ a=`grep -c '^\\bibitem' file.tex`; echo $a

输出为0。

直接执行 grep -c '^\\bibitem' file.tex 输出为正常值。

可能是正则表达和转义哪块有问题。

谢谢。

 
昵称: michaelyung  时间: 2009-06-27 01:41:00

知道问题在哪了。赋值时,正则表达里的转义符两个backslash都需要转义。所以应该是:

代码:
a=`grep -c '^\\\\bibitem' paper.tex`;echo $a

愚蠢的错误。

多谢大家。

引用:
作者: michaelyung
刚试了一下,直接匹配没有问题。

用了正则表达的时候就会有这问题,比如

加了-E选项也一样,$a输出为0.



附上我的例子,有一个tex文件,内含有:
代码:
.....
\bibitem
.....

用以下的命令:

代码:
$ a=`grep -c '^\\bibitem' file.tex`; echo $a

输出为0。

直接执行 grep -c '^\\bibitem' file.tex 输出为正常值。

可能是正则表达和转义哪块有问题。

谢谢。