我有一个效果很好的脚本但在该脚本中我使用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/
但这不起作用。 安妮的建议?
答案 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