已经做了一百万次,但这次它不起作用我尝试从文件中 grep "$TITLE"。在命令行上它正在工作,“$TITLE”变量不为空,但是当我运行脚本时它什么也没找到
*title 包含多个单词
echo "$TITLE"
cat PAGE.$TEMP.2 | grep "$TITLE"
我试过的:
echo "cat PAGE.$TEMP.2 | grep $TITLE"
查看标题是否不为空并且文件名是否实际存在
您确定$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 -xc
which sould 使您能够发现错误的字符。
这个命令
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"
(你的默认行为应该是引用参数扩展,除非你能证明这样做是不正确的。)
为我工作:
~> cat test.dat
abc
cda
xyz
~> export GRP=cda
~> cat test.dat | grep $GRP
cda
编辑:
正确的使用方法grep
是:
~> grep $GRP test.dat