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

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

问题是由于反引号,grep的输出正在作为命令执行。

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

grep 'TYPE' file

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

var=$(grep 'TYPE' file)

现在你可以用$var做你喜欢的事情了。

你说你想要"字"TYPE. 如果您的文件中有以下行怎么办:

String(`UNTYPELESS',`ABC')dnl 

你搜索TYPE也会发现这一点! 如果要检查单词边界,可以使用egrep

egrep 'bTYPEb' file

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

  • 你不需要cat
  • 你把 shell cmd 放在反引号中,cmd 的结果将作为新命令执行,这就是为什么你有错误 msg
  • 如果您只想查看结果,只需grep 'TYPE' file
  • 如果要将结果断言为某个变量,RESULT="$(grep 'TYPE' file)"

最新更新