BASH:可以在命令行上grep,但不能在脚本中

时间:2012-09-06 10:13:23

标签: linux bash grep

已经有这么多次,但这次它没有用 我尝试从文件中获取“$ TITLE”。在命令行上它正在工作,“$ TITLE”变量不为空,但是当我运行脚本时它什么都没找到

*标题包含多个单词

echo "$TITLE"
cat PAGE.$TEMP.2 | grep "$TITLE"

我尝试了什么:

echo "cat PAGE.$TEMP.2 | grep $TITLE"

查看标题是否为空,文件名实际上是

3 个答案:

答案 0 :(得分:3)

您确定$TITLE没有文件中没有的前导或尾随空格吗?你对字符串的修复会在执行之前删除空格,所以它不会看到它。

例如,使用包含“第一行”的文件:

/home/user1> TITLE=' one '
/home/user1> grep "$TITLE" text.txt
/home/user1> cat text.txt | grep $TITLE
Line one

尝试echo "<$TITLE>"echo "$TITLE"|od -xc,这样可以让您发现错误的字符。

答案 1 :(得分:0)

适合我:

~> cat test.dat
abc
cda
xyz
~> export GRP=cda
~> cat test.dat | grep $GRP
cda

编辑:

使用grep的正确方法是:

~> grep $GRP test.dat

答案 2 :(得分:0)

此命令

echo "cat PAGE.$TEMP.2 | grep $TITLE"

回显一个以'cat'开头的字符串。它不运行命令。你想要

echo "$( cat PAGE.$TEMP.2 | grep $TITLE )"

尽管功能与简单的

相同
cat PAGE.$TEMP.2 | grep $TITLE

正如其他人所指出的,不需要使用cat来管道单个文件; grep可以正常读取文件:

grep "$TITLE" "PAGE.$TEMP.2"

(您的默认行为应该是引用参数扩展,除非您可以证明它不正确。)