Shell 需要从grep的输出中删除路径,但不需要删除文件
我有一个非常好的脚本,但是在这个脚本中,我使用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 -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