我有一个包含一个文件:grep的字符串,从文件的报价不工作
2016-08-15 21:02:59,007: 233-670-rundeck-dispatch-script.tmp.sh: Info: Arg: -H server -S SrvCtrl,SNMP -A \"restart\" -CS \"Undefined\" -RS \"Undefined\" -CT \"Undefined\" -RT \"Undefined\" --LogServer logserver:5610
正如我试图尾巴的执行日志,我检查,如果该日志文件包含了最新的日志。看看这个字符串是否存在。我使用grep -F,grep的-E,grep的-FFxq 试过因此,在短期它归结为:
CurrentLog="2016-08-15 21:02:59,007: 233-670-rundeck-dispatch-script.tmp.sh: Info: Arg: -H server -S SrvCtrl,SNMP -A \"restart\" -CS \"Undefined\" -RS \"Undefined\" -CT \"Undefined\" -RT \"Undefined\" --LogServer logserver:5610"
请注意,CurrentLog充满这样的:
CurrentLog=$(echo "$OutputTail" | jq ".entries[$EntryCount].log" | sed -e 's/^"//' -e 's/"$//')
意义,我可以只是单引号。
grep -Fxq "$CurrentLog" "/usr/local/nagios/libexec/DAF-988e7506-36c3-47e3-8ef2-428309e2c7f7-670.log"
好像我需要逃避这两个“”“和‘\’。我怎样才能在一个命令这样做吗?我希望在-F不会要求我增加额外的逃避?
你可能会考虑通过http://shellcheck.net/运行的代码习惯的问题和固定它认定。一个没有引号的扩展(即''CurrentLog' vs'“$ CurrentLog”')几乎总是错误的。 –
我会考虑自己的答案,但问题目前尚不完整,无法独立评估答案是否完全正确。您可能会考虑尝试添加一个最小的,完整的,可验证的示例(根据http://stackoverflow.com/help/mcve) - 这涉及的一部分是构建一个包含展示正确功能所需的所有内容的示例(无关-stage'/ usr/local/nagios'文件,例如使用但未显示;没有提及处理输出的日志,但未显示原始数据;等等),以及除去此类验证所需的任何内容*。 –
...因为在这里,如果您只接受来自'jq'的内容正确处理的答案,那么您可以考虑提供一个JSON格式的原始输入示例,这样人们可以相应地做出回答。 –