运行脚本后grep日志并展示时出现sed命令未终止报错的问题
报错触发原因
你当前写的sed命令存在明确的语法结构缺失,直接触发了解析器报错,存在的问题:
- sed替换命令未闭合:sed的s替换命令标准格式为
s/匹配规则/替换内容/修饰符,你写的sed -e s/'Log File (.*)$'既没有用斜杠拆分匹配段、替换段,也没有补全命令末尾的终止斜杠,刚好命中unterminated s' command的报错触发条件 - 正则匹配逻辑错误:你写的
Log File (.*)$里的圆括号,在sed默认启用的基础正则规则下属于普通字符,不是捕获分组,就算语法补全也匹配不到预期的日志路径内容 - 引号嵌套混乱:把本应作为sed脚本入参的片段整体用单引号包裹,导致shell解析时无法正确拆分命令参数
满足需求的正确实现
你的核心目标是运行abc.sh脚本,从输出中定位关联的日志文件路径,再直接展示对应日志的内容,完整管道链可以写为:
sh abc.sh | grep "Log File: " | sed 's/.*Log File: //' | xargs cat
各环节的作用:
- 执行指定的abc.sh脚本,获取脚本的全量输出
- 用grep过滤出所有包含
Log File:标记的行,筛除无关的输出内容 - 用sed把每行中
Log File:标记本身、以及标记前面的冗余内容删掉,只留下标记后面跟的日志文件实际路径 - 把提取到的文件路径通过xargs传给cat命令,直接打印对应日志文件的全部内容
兼容提示:如果日志路径中包含空格,上面的命令会因为xargs默认按空格拆分参数出现识别错误,这种情况可以把最后一步替换为
while read line; do cat "$line"; done,就能兼容带空格的文件路径了。
内容的提问来源于stack exchange,提问作者Ironman1234
相关产品推荐
相关产品推荐

