如何在 Find 和 grep 命令中使用变量?

如何在 Find 和 grep 命令中使用变量?

查找命令来获取名称中包含日期部分的文件(脚本中包含日期的 ($Y 变量)

Y=(date -d "1 day ago" "+%Y-%m-%d")
find /log/bssuser/CDR/Postpaid_CDR_Log/ -type f -name '*log_LOG_POSTPAID_CDR'*$Y*.log | grep -H '^ORA' 'log_LOG_POSTPAID_CDR'*$Y*.log 

运行此命令时出现以下错误:

grep: log_LOG_POSTPAID_CDR*date*.log: No such file or directory

该命令无法查看,$Y因为变量的日期是昨天

EX 为文件之一的名称:

log_LOG_POSTPAID_CDR-2023-10-16_PTT_CDR.1066.20231010000509.csv_KODIAK-100.log

答案1

正如 Jos 和 sudodus 指出的那样,存在一些小错误和拼写错误。

首先,您需要使用命令替换$()来使变量起作用。

其次,在命令中使用双引号内的变量find

第三,如果您要将文件输出直接通过管道传输到 grep 命令(在您找到的文件内进行 grep),您应该使用xargs

所以你想要的应该是这样的:

Y=$(date -d "1 day ago" "+%Y-%m-%d")
find /log/bssuser/CDR/Postpaid_CDR_Log/ -type f -name "*log_LOG_POSTPAID_CDR*$Y*.log" | xargs grep -H '^ORA'

相关内容