Shell脚本在变量名称旁边搜索文字美元符号

时间:2014-04-17 20:29:15

标签: regex shell awk grep busybox

在搜索代码时,我试图编写一个需要在变量前面搜索文字美元符号的正则表达式。

$ cat file1
a
b
c
$c1
$c2
d
$c-falaffel
$f

我想要一个grep表达式,当传递" c"时,返回:

$c1
$c2
$c-falaffel

到目前为止我所拥有的:

mode="c"
grep "\\$${mode}" file1

但shell继续将$$解释为要求pid。你怎么在地狱中搜索一个带有文字美元符号的变量中定义的表达式?

哦,它必须在符合POSIX标准的shell中很好(它需要在busybox shell上运行),因此不能接受基础知识。

3 个答案:

答案 0 :(得分:3)

你有太多的反斜杠

$ mode="c"
$ grep "\$$mode" file1
$c1
$c2
$c-falaffel
$ 

在bash 4.2.20,ksh 93u +和zsh 5.0.5

中测试

答案 1 :(得分:1)

这可能接近您的需要:

awk -v RS= -v var="$mode" 'sub(".*if [$]" var "_mode","")' "$0"

或者这个:

awk -v RS= -v var="$mode" 'match($0,"if [$]" var "_mode"){print substr($0,RSTART)}' "$0"

一旦你发布了一些输入和输出,我们就会有更好的想法。

答案 2 :(得分:0)

非常类似于Ed Morton的回答:你必须建立字符串。

search_string='$'
search_string="${search_string}$mode"
grep "$search_string" file1