需要从grep的输出中删除路径,而不是文件

时间:2013-06-24 04:49:47

标签: shell cron grep output

我有一个效果很好的脚本但在该脚本中我使用grep来提取两行

grep -e "string1" -e "string" my_fliles* >> //destination

看起来很好的输出

filename1 string1
filename1 string2
filename2 string1
filename2 string2
filename3 string1
filename3 string2

这是期望的效果但是为了让它在cron作业中工作,我必须指定my_files的完整路径

grep -e "string1" -e "string" /home/username/scriptfolder/logs/my_fliles* >> //destination

创建输出

/home/username/scriptfolder/logs/filename1 string1
/home/username/scriptfolder/logs/filename1 string2
/home/username/scriptfolder/logs/filename2 string1
/home/username/scriptfolder/logs/filename2 string2
/home/username/scriptfolder/logs/filename3 string1
/home/username/scriptfolder/logs/filename3 string2

我想要文件名和字符串输出,但不是路径。 我尝试删除路径并使用

在脚本中指定路径
export PATH=$PATH:/home/username/scriptfolder/logs/

但这不起作用。 安妮的建议?

4 个答案:

答案 0 :(得分:1)

PATH是查找可执行文件的搜索路径,而不是常规文件,因此无法使用。在crontab命令中尝试:

cd /home/username/scriptfolder/logs; grep -e "string1" -e "string" my_fliles* >> //destination

答案 1 :(得分:1)

grep -e "string1" -e "string" ./my_fliles* | 
awk -F " " '{ n = split($1,RES,"/"); OUT=RES[n];
for( i=2; i<=NF; i++) { OUT=OUT" "$i } print OUT;}'

grep结果中,路径和字符串以' '(空格)分隔

/home/username/scriptfolder/logs/filename1 string1

您可以使用-F标志设置awk使用的字段分隔符,默认分隔符为空格。 这会将输入拆分为$1, $2, . . . , $NF个字段。

awk具有预定义的函数split

n = split( String, A, [Ere] )

此函数将String参数指定的字符串拆分为数组元素A[1], A[2], . . ., A[n],并返回值 n变量的变化。分隔是使用Ere参数指定的扩展正则表达式完成的 如果未给出FS参数,则为当前字段分隔符(Ere特殊变量)。 A数组中的元素是 使用字符串值创建,除非上下文指示特定元素也应该具有数值。

for( i=2; i<=NF; i++) { OUT=OUT" "$i }将原始输入字段连接到由空格分隔的变量OUT中。这是为了确保我们不会因为搜索字符串 string1 string2 中的空格而遗漏任何字段。请注意,循环以i=2

开头

最终输出如下所示:

filename1 string1
filename1 string2
filename2 string1

答案 2 :(得分:0)

如果您在目录外grep,我不确定是否有办法抑制路径。但是,您可以使用awk来删除路径。类似的东西:

awk -F/ '{print $NF}' <(grep -e "string1" -e "string" /home/username/scriptfolder/logs/my_fliles*) > destination

答案 3 :(得分:0)

如果您手动使用grep -e "string1" -e "string" ./my_fliles* >> //destination,那么 用这两行创建一个脚本并运行该脚本

cd /home/username/scriptfolder/logs/
grep -e "string1" -e "string" ./my_fliles* >> //destination

如果grep -e "string1" -e "string" ./my_fliles* >> //destination是脚本的一部分,则添加

cd /home/username/scriptfolder/logs/

之前的这一行

grep -e "string1" -e "string" ./my_fliles* >> //destination