2017-03-08 80 views
0

我有了这样的unix命令到grep一个特定的词在文件

String(`TYPE',`ABC')dnl 
String('TYPE',`BCD')dnl 

和其他一些类似的线图案的文件,所以在这里,我想这条线String( TYPE”,ABC')dnl 我现在用这个命令

cat file | grep TYPE 

这给了我所需要的输出,但是当我使用一个脚本中相同的命令,它抛出一个错误

`cat file | grep TYPE` 
-bash: define(`TYPE',`ABC')dnl: command not found 

什么是我需要修改我的命令?

回答

0

的问题是,从grep输出正在执行d作为一个命令,因为反弹。

首先,您不需要外部程序catgrep将输入文件名作为参数。其次,明智的做法是始终用单引号括起您要查找的图案,以保护它免受外壳损坏。在这种情况下,它没有严格要求,但它是一个很好的习惯进入:

grep 'TYPE' file 

现在,该命令将结果写到标准输出(屏幕)。如果你想让它保存在一个变量,然后使用$()符号,而不是过时的反单引号:

var=$(grep 'TYPE' file) 

现在你可以做你喜欢$var

你说你想要“单词”TYPE。如果你有这条线在你的文件:

String(`UNTYPELESS',`ABC')dnl 

您搜索的TYPE会挑选起来的!如果您想检查单词边界,您可以使用egrep

egrep '\bTYPE\b' file 

\b表明字 - 边界(基本上是任何非字母或文字或结束文本的开始)必须存在指向该模式。

0
  • 你不需要cat
  • 你把外壳cmd在背蜱,在CMD的结果将作为新的命令来执行,这就是为什么你有错误味精
  • 如果你只是希望看到的结果,只是grep 'TYPE' file
  • 如果你想结果assing一些变种,RESULT="$(grep 'TYPE' file)"