Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 用当前文件夹名替换日志文件中的字符串路径_Shell_Awk_Sed_Xargs - Fatal编程技术网

Shell 用当前文件夹名替换日志文件中的字符串路径

Shell 用当前文件夹名替换日志文件中的字符串路径,shell,awk,sed,xargs,Shell,Awk,Sed,Xargs,我是新来的,已经试着找到以下需求的解决方案,但没有成功。我正在努力做到这一点: 我有以下5个文件夹: ServiceEngine PaymentEngine InvoiceEngine ProcessEngine OrderProcessEngine 在每个文件夹中,我都有一个带有默认路径位置的日志文件来存储日志文件,例如ServiceEngine/logs 日志文件包含以下路径结构: name="RollingRandomAccessFile" fileName="logs/engine.l

我是新来的,已经试着找到以下需求的解决方案,但没有成功。我正在努力做到这一点:

我有以下5个文件夹:

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日志文件\新日志文件