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

Shell 需要从grep的输出中删除路径,但不需要删除文件,shell,cron,grep,output,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作业中工作,我必须指定我的

我有一个非常好的脚本,但是在这个脚本中,我使用grep来提取两行代码

grep -e "string1" -e "string" my_fliles* >> //destination
它的输出看起来不错

filename1 string1
filename1 string2
filename2 string1
filename2 string2
filename3 string1
filename3 string2
这是期望的效果,但为了让它在cron作业中工作,我必须指定我的_文件的完整路径

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/
但这并不奏效。
有什么建议吗?

如果在目录外执行
grep
操作,我不确定是否有方法抑制路径。但是,您可以使用
awk
剥离路径。比如:

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

路径
是用于查找可执行文件的搜索路径,而不是常规文件,因此它不起作用。在crontab命令中尝试以下操作:

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

如果您正在手动使用
grep-e“string1”-e“string”。/my\u fliles*>//destination
,则 用这两行创建一个脚本并运行该脚本

cd /home/username/scriptfolder/logs/
grep -e "string1" -e "string" ./my_fliles* >> //destination
如果
grep-e“string1”-e“string”。/my_fliles*>>//目标
是脚本的一部分,则添加

cd/home/username/scriptfolder/logs/

这一行之前

grep-e“string1”-e“string”。/my\u fliles*>>//目的地

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;}'
您可以使用
-F
标志设置
awk
使用的字段分隔符,默认分隔符为空格。 这会将输入拆分为
$1,$2$NF
字段

awk
具有预定义的功能
split

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


for(i=2;ibest:使用pushd、popd而不是cdd感谢有效的解决方案和解释!
n = split( String, A, [Ere] )
filename1 string1
filename1 string2
filename2 string1