3

已经做了一百万次,但这次它不起作用我尝试从文件中 grep "$TITLE"。在命令行上它正在工作,“$TITLE”变量不为空,但是当我运行脚本时它什么也没找到

*title 包含多个单词

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

我试过的:

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

查看标题是否不为空并且文件名是否实际存在

4

3 回答 3

4

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

例如,对于包含“第一行”的文件:

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

试试echo "<$TITLE>", or echo "$TITLE"|od -xcwhich sould 使您能够发现错误的字符。

于 2012-09-06T10:39:52.730 回答
1

这个命令

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"

(你的默认行为应该是引用参数扩展,除非你能证明这样做是不正确的。)

于 2012-09-06T12:01:34.710 回答
0

为我工作:

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

编辑:

正确的使用方法grep是:

~> grep $GRP test.dat
于 2012-09-06T10:17:04.967 回答