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

Shell 用于grep文件中特定单词的unix命令,shell,unix,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 我需要在命令中

我有一个这样的文件

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
我需要在命令中修改哪些内容?

  • 您不需要
    cat
  • 将shell cmd放在back ticks中,cmd的结果将作为new命令执行,这就是出现错误msg的原因
  • 如果您只想查看结果,只需
    grep'TYPE'文件
  • 如果要将结果分配给某个变量,
    result=“$(grep'TYPE'file)”

问题在于,由于反向滴答声,
grep
的输出作为命令执行

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

grep 'TYPE' file
现在,该命令将结果写入标准输出(屏幕)。如果要将其存储在变量中,请使用
$()
表示法,而不是不推荐使用的反勾号:

 var=$(grep 'TYPE' file)
现在,您可以使用
$var
执行您喜欢的操作

你说你想要“单词”
类型
。如果文件中有这一行怎么办:

String(`UNTYPELESS',`ABC')dnl 
你搜索
类型
也会找到它!如果要检查单词边界,可以使用
egrep

egrep '\bTYPE\b' file
\b
表示单词边界(基本上是任何非字母、文本开头或文本结尾)必须存在于模式中的该点