【问题标题】:Shell script grep alternativeShell 脚本 grep 替代
【发布时间】:2017-10-26 20:35:26
【问题描述】:

如何替换 grep?

CONNECTION=$( grep $INST\; $CONNFILE | cut -d\; -f2) || exit 3;

我在我的 PHP 页面下收到以下错误消息:

“grep接收到的值:session_inactive;:没有那个文件或目录”

【问题讨论】:

  • 你试过grep "$INST;"grep "${INST};"吗?我猜你的 INST 变量可能包含空格。
  • 这是一个相当大的飞跃,问“如何替换 grep?”而不是“如何解决我使用 grep 的方式?”
  • ...顺便说一句,全大写名称用于对操作系统或外壳有意义的变量;考虑养成为您自己的变量使用小写名称的习惯,因为这些是reserved by POSIX 供应用程序使用,并保证不会修改 shell 或 POSIX 指定的 OS 实用程序的行为。并考虑在此处提问之前养成使用shellcheck.net 的习惯——例如,这会指出缺少的引号。
  • PHP 代码不接受 grep。是否可以用 awk 或 sed 替换它?
  • 无论如何,如果您想获得更多有用的回复,而不是仅仅断言您做错了,edit 您的问题包括minimal reproducible example,其他任何人都可以运行以查看相同的内容问题,没有相同的 INST 变量已经定义或 CONFFILE 存在。

标签: php regex shell grep


【解决方案1】:

首先:没有理由你不能成功地使用grep 来完成这项工作


但是:由于您正在尝试修剪单个字段,您可以使用 awk 来完成 grepcut 的工作,同时确保它正在执行文字搜索而不是模式匹配:

connfile="$SCRIPTDIR/credentials"
connection=$(awk -F';' -v inst="${INST};" 'index($0, inst) > 0 { print $2; }' <"$connfile")

更好的是,如果您真正想做的是匹配第一个字段并打印第二个字段,并且包含第一个匹配行:

connection=$(awk -F';' -v inst="${INST};" '$1 == inst { print $2; exit; }' <"$connfile")

【讨论】:

  • Charles,即使换了表情,我在 Zabbix 下也面临同样的问题。
  • 我需要minimal reproducible example。事实上,除了你之外,没有人能看到你的问题。
  • Charles,即使在更改表达式后,我在 Zabbix 页面下也面临同样的错误。 CONNECTION=$(awk -F';' -v inst="${INST};" 'index($0, inst) > 0 { print $2; }'
  • 第三次重复:您需要提供复制器。如果没有其他人可以看到您的问题,那么没有其他人可以解决您的问题。编写一个嵌入此 shell 命令的 PHP 脚本并不难,就像您在其他情况下所做的那样。 也就是说,这应该在另一个/单独的问题中完成,因为您没有标记这个 PHP。
猜你喜欢
  • 2021-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-05
  • 2017-03-15
相关资源
最近更新 更多