首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在grep中使用变量不起作用。

在grep中使用变量不起作用。
EN

Stack Overflow用户
提问于 2014-06-03 05:42:02
回答 3查看 3.7K关注 0票数 1

我有一个文件VALIDATION_CONFIG_FILE.cfg,它包含以下记录:

代码语言:javascript
复制
ES_VDF_1|1
DE_VDF_1|2
ES_VDF_1|7

当我通过使用变量使用下面的grep命令时,该命令将返回ES_VDF_1输出。根据我的理解,指挥部不应该给出任何结果。当我使用相同的命令而不使用变量(直接使用值)时,命令将不返回结果,这与预期的一样。那么,我使用的变量有什么问题呢?

代码语言:javascript
复制
FEED_ID_1_7="HU_VDF_1"
FEED_ID_2_7="ES_VDF_1"
FEED_ID_3_7="PT_VDF_2"

awk -F'|' '{ if($2=="7") print $1; }' VALIDATION_CONFIG_FILE.cfg |
grep -E -v '${FEED_ID_1_7}|${FEED_ID_2_7}|${FEED_ID_3_7}'

输出:ES_VDF_1

代码语言:javascript
复制
awk -F'|' '{ if($2=="7") print $1; }' VALIDATION_CONFIG_FILE.cfg |
grep -E -v 'ES_VDF_1|HU_VDF_1|PT_VDF_2'

产出:无

EN

回答 3

Stack Overflow用户

发布于 2014-06-03 06:36:49

您所看到的问题是,Bash中的单引号不插值变量,而双引号则这样做。

例如,有一个被称为“变量”的变量:

代码语言:javascript
复制
alex@yuzu:~$ export VARIABLE="foo"

如果用双引号回显它,则会对其进行内插,并使用变量的值:

代码语言:javascript
复制
alex@yuzu:~$ echo "$VARIABLE"
foo

但是,如果使用单引号,则使用文字字符串'$VARIABLE‘代替:

代码语言:javascript
复制
alex@yuzu:~$ echo '$VARIABLE'
$VARIABLE

你的grep也是如此。

代码语言:javascript
复制
grep -E -v '${FEED_ID_1_7}|${FEED_ID_2_7}|${FEED_ID_3_7}'

应:

代码语言:javascript
复制
grep -E -v "${FEED_ID_1_7}\|${FEED_ID_2_7}\|${FEED_ID_3_7}"

例如:

代码语言:javascript
复制
alex@yuzu:~$ echo "foo" | grep -E "$VARIABLE|$HOME|$USER"
foo

alex@yuzu:~$ echo "foo" | grep -E '$VARIABLE|$HOME|$USER'
[ no output ]
票数 3
EN

Stack Overflow用户

发布于 2014-06-03 06:38:25

这是由于引号造成的。

单引号不会插入任何内容,但是双引号可以。用如下所示的变量替换单引号为双引号:

代码语言:javascript
复制
awk -F'|' '{ if($2=="7") print $1; }' VALIDATION_CONFIG_FILE.cfg |
grep -E -v "${FEED_ID_1_7}|${FEED_ID_2_7}|${FEED_ID_3_7}"

有关更多细节,请参阅巴什手册

票数 2
EN

Stack Overflow用户

发布于 2014-06-03 06:42:15

在Kaoru/ normal的回答中,使用fgrep和multiple -e的普通文本搜索可以使其更加安全。

代码语言:javascript
复制
fgrep -v -e "${FEED_ID_1_7}" -e "${FEED_ID_2_7}" -e "${FEED_ID_3_7}"

这将有助于防止误读,以防在变量的值中添加特殊字符。

如果您没有fgrep,请尝试grep -F

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24007882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档