Shell 用当前文件夹名替换日志文件中的字符串路径
我是新来的,已经试着找到以下需求的解决方案,但没有成功。我正在努力做到这一点: 我有以下5个文件夹:Shell 用当前文件夹名替换日志文件中的字符串路径,shell,awk,sed,xargs,Shell,Awk,Sed,Xargs,我是新来的,已经试着找到以下需求的解决方案,但没有成功。我正在努力做到这一点: 我有以下5个文件夹: ServiceEngine PaymentEngine InvoiceEngine ProcessEngine OrderProcessEngine 在每个文件夹中,我都有一个带有默认路径位置的日志文件来存储日志文件,例如ServiceEngine/logs 日志文件包含以下路径结构: name="RollingRandomAccessFile" fileName="logs/engine.l
ServiceEngine
PaymentEngine
InvoiceEngine
ProcessEngine
OrderProcessEngine
在每个文件夹中,我都有一个带有默认路径位置的日志文件来存储日志文件,例如ServiceEngine/logs
日志文件包含以下路径结构:
name="RollingRandomAccessFile" fileName="logs/engine.log"
filePattern="logs/engine-%i.log"
我希望找到一种方法,检索当前文件夹的名称,并用文件夹名称替换字符串引擎
示例:我在ServiceEngine文件夹中,执行一个检索当前文件夹名称的命令。预期结果是:
name="RollingRandomAccessFile" fileName="logs/ServiceEngine.log"
filePattern="logs/ServiceEngine-%i.log
稍后我将目录更改为PaymentEngine,预期结果是:
name="RollingRandomAccessFile" fileName="logs/PaymentEngine.log"
filePattern="logs/PaymentEngine-%i.log
等等。也许有一种更聪明的方法可以创建一个脚本,像do一样在循环中更新字符串<代码>如果<代码>fi;完成或在中使用。。。循环。你的意思是这样的吗
~/ServiceEngine$ cat logfile
name="RollingRandomAccessFile" fileName="logs/engine.log"
filePattern="logs/engine-%i.log"
~/ServiceEngine$ awk -v path=$(basename $(pwd)) 'gsub("engine", path)' logfile
name="RollingRandomAccessFile" fileName="logs/ServiceEngine.log"
filePattern="logs/ServiceEngine-%i.log"
看,还有。你的意思是这样的吗
~/ServiceEngine$ cat logfile
name="RollingRandomAccessFile" fileName="logs/engine.log"
filePattern="logs/engine-%i.log"
~/ServiceEngine$ awk -v path=$(basename $(pwd)) 'gsub("engine", path)' logfile
name="RollingRandomAccessFile" fileName="logs/ServiceEngine.log"
filePattern="logs/ServiceEngine-%i.log"
看,还有。我想我不明白你的问题,但是:
dir=$( basename $( pwd ) )
echo name="RollingRandomAccessFile" \
fileName="logs/$dir.log" \
filePattern="logs/$dir-%i.log"
这就是你想要的吗?我想我不明白你的问题,但是:
dir=$( basename $( pwd ) )
echo name="RollingRandomAccessFile" \
fileName="logs/$dir.log" \
filePattern="logs/$dir-%i.log"
这就是你要找的吗?听起来你在找这样的东西:
$ sed 's/\bengine\b/'$(basename $(pwd))'/' logs
当从你的一个文件夹中运行时,它会吐出你要的文本。但是,不清楚您想用该文本做什么。听起来您正在寻找类似的内容:
$ sed 's/\bengine\b/'$(basename $(pwd))'/' logs
当从你的一个文件夹中运行时,它会吐出你要的文本。不过,不清楚您想用该文本做什么。
“logs/PaymentEngine-%i.log
看起来像DOS批处理语法。日志文件是什么类型的?这不是对您问题的回答,但我建议您使用Splunk
分析日志。每天可以免费使用高达500MB的日志。它将自动处理文件和格式。@RegExp12还需要什么吗?如果没有,请✓ 答案之一。“logs/PaymentEngine-%i.log
看起来像DOS批处理语法。日志文件是什么类型的?这不是对您问题的回答,但我建议您使用Splunk
分析日志。每天可以免费使用高达500MB的日志。它将自动处理文件和格式。@RegExp12还需要什么吗?如果没有,请✓ 答案之一。是的,这正是我需要的。我尝试过这个命令,但它只打印结果,而没有将其保存在file@RegExp12你打电话给awk的时候可能会呆呆的。从版本4.1.0开始,您只需调用awk-i inplace
(使用awk--version
进行检查)。对旧版本使用临时文件,因此awk…>新的日志文件;mv logfile\u新日志文件
。是的,这正是我需要的。我尝试过这个命令,但它只打印结果,而没有将其保存在file@RegExp12你打电话给awk的时候可能会呆呆的。从版本4.1.0开始,您只需调用awk-i inplace
(使用awk--version
进行检查)。对旧版本使用临时文件,因此awk…>新的日志文件;mv日志文件\新日志文件
。