unix命令用于grep文件中的特定单词

时间:2017-03-08 13:29:39

标签: shell unix

我有一个像这样的模式的文件

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

我需要在命令中修改什么?

2 个答案:

答案 0 :(得分:1)

问题在于grep的输出由于后退而被作为命令执行。

首先,您不需要外部程序catgrep将输入文件名作为参数。其次,最好用单引号括起你正在寻找的模式,以保护它免受外壳的影响。在这种情况下,并不是严格要求,但这是一个很好的习惯:

grep 'TYPE' file

现在,该命令会将结果写入标准输出(屏幕)。如果您希望将其存储在变量中,请使用$( )表示法而不是弃用的后记:

 var=$(grep 'TYPE' file)

现在,您可以使用$var执行您喜欢的操作。

你说你想要"字" TYPE。如果您的文件中包含以下内容该怎么办:

String(`UNTYPELESS',`ABC')dnl 

您对TYPE的搜索也会选择它!如果要检查字边界,可以使用egrep

egrep '\bTYPE\b' file

\b表示在模式中的那一点必须存在单词边界(基本上是任何非alpha,或文本的开头或文本结尾)。

答案 1 :(得分:0)

  • 您不需要cat
  • 你将shell cmd放在后面的方法中,cmd的结果将作为新命令执行,这就是你有错误的原因msg
  • 如果您只想查看结果,请grep 'TYPE' file
  • 如果您想将结果分配给某些var RESULT="$(grep 'TYPE' file)"