问题描述
我有一个使用 curl 下载的 json 文件。它有一些汇合页面的信息。我只想提取下载信息的 3 个部分 - 即页面:id、状态和标题。 我为此编写了一个 bash 脚本,我的约束是我不确定如何在 grep 命令中传递多个变量
id=id #hardcoded
status=status #hardcoded
echo Enter title you are looking for: #taking input from user here read title_name echo echo echo Here are details
curl -u username:password -sX GET "http://X.X.X.X:8090/rest/api/content?type=page&start=0&limit=200" | python -mjson.tool | grep -Eai "$title_name"|$id|$status"
解决方法
除了打字错误(您有一个不平衡的引用 - 请始终在发布内容之前检查语法是否正确),您的方法的基本思想将适用于
grep -Eai "$title_name|$id|$status"
将选择那些包含变量 title_name
、id
或 status
之一的内容的行的文本行。
然而,这是一个非常脆弱的解决方案。我不知道这些变量的实际内容是什么,但例如,如果 title_name
设置为 X.Z
,它也会匹配包含字符串 XYZ 的行,因为点匹配任何字符。同样,如果 title_name
包含一个单独的 [
或 (
,grep 会抱怨不匹配的括号 错误。
如果你想匹配字符串字面而不被当作正则表达式,最好将这些模式写入文件(每行一个模式)并使用
grep -F -f patternfile
用于搜索。当然,由于您使用的是 bash,如果您不想使用显式临时文件,也可以使用 process substitution。