在搜索代码时,我试图编写一个需要在变量前面搜索文字美元符号的正则表达式。
$ 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上运行),因此不能接受基础知识。
答案 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