>我有一个文件具有这样的模式
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
的输出正在作为命令执行。
首先,你不需要外部程序cat
,grep
将输入文件名作为参数。 其次,明智的做法是始终将您正在寻找的模式括在单引号中,以保护它免受外壳的影响。 在这种情况下,这不是严格要求的,但进入以下方面是一个好习惯:
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)"