如何对变量进行 grep

如何对变量进行 grep

我有一个这样的场景

VAR = `Some command brings the file path name and assigns it to VAR`

例如 VAR 可以具有类似 /root/user/samp.txt 的值

我想要 grep 命令

grep HI $VAR 

这不起作用,会出现错误,提示无法打开 /root/user/samp.txt 尝试 cat $VAR 时出现相同的错误。

这要怎么处理呢?

我已经尝试过

echo $VAR | grep HI
grep HI "$VAR"

使用 korn shell

答案1

我知道您要求 grep,但如果我理解正确的话,您想在路径字符串中搜索子字符串。您可以仅使用==or=~来实现此目的,如

[[ "$VAR" == *"HI"* ]]     # Does "$VAR" match <stuff>HI<stuff>?

或者

[[ "$VAR" =~ "HI" ]]       # Does "$VAR" contain HI?

答案2

我有一个由命令分配文件路径的变量,

例如

VAR= grep /adr filename - 假设我的文件名有一行像/adr/samp.txt

因此,当我 echo $VAR 时,它会给出 /adr/samp.txt,但会给出 cat $VAR 或 grep 的错误

我通过设置 VAR=$(grep /adr filename) 解决了这个问题。然后我就可以做 cat $VAR 了。

我不知道有什么问题``

谢谢,阿德尔

答案3

WAF的[[ "$VAR" =~ "HI" ]]答复这里有一个很棒的bash/ksh解决方案,可能就是您正在寻找的,但如果有人正在寻找一个便携式解决方案,这里是如何在普通的 POSIX shell(基本/bin/sh)中本地执行此操作:

[ "$VAR" != "${VAR#*HI}" ]

当心,shell 模式语法(又名“通配符”)是不同的来自 POSIX 正则表达式语法。

这会将 的值$VAR${VAR#*HI}参数扩展进行比较,从而实现子串删除删除开头到第一个“HI”实例之间的任何内容(给定VAR="OHIO",${VAR#*HI}将删除前导OHI,结果只是O.VAR="Hi, I am bob"将保持不变)。

由于!=比较,返回值将是真的( 0) 当两个字符串不同时(表示 中存在“HI” $VAR)并且错误的( 1) 当它们相同时(表示 中不存在“HI” $VAR)。

相关内容