在 grep 命令中传递参数

在 grep 命令中传递参数

如何将变量传递到grep命令中?这个硬编码值正在起作用:

startingLine=`grep -oP '(2017-01-03 )\w+.+' cv-batch.log | head -1`
echo $startingLine

但是当我尝试使用变量时,它停止工作:

currDate=$(date -d "$dataset_date" +%Y-%m-%d)
echo $currDate
startingLine=`grep -oP '($currDate )\w+.+' cv-batch.log | head -1`

编辑: 我尝试了以下方法,但也不起作用:

startingLine=`grep -oP '("$currDate" )\w+.+' cv-batch.log | head -1`

答案1

该变量未被“传递”,因为它位于单引号中。 shell 不会在单引号内进行变量扩展。使用双引号来让 shell 在调用之前扩展变量的值grep

startingLine="$( grep -oP "($currDate )\w+.+" cv-batch.log | head -1)"

请注意,多变的实际上从未“传递”给grep,而是 shell 执行实用程序时使用的扩展值。尝试通过首先启用跟踪 ( set -x) 来运行它,以查看运行它时实际发生的情况(随后禁用跟踪set +x)。

我还使用了更强大(并且更好看)的命令替换语法$( ... ),并引用了整个结果字符串,以避免文件名通配和分词出现任何问题。

$currDate您还应该在以下内容中双引号echo

echo "$currDate"

或者

printf '%s\n' "$currDate"

相关内容