我正在尝试使用以下代码:
searchfile="availables.txt"
read searchterm
grep_params="-i ^.*${searchterm}.*;.*$' $searchfile"
egrep $grep_params
应该回显以$ searchterm开头的所有行,然后是“;”。但是如果searchterm包含空格它不起作用(例如:“黑眼豆豆”),它会给我以下输出:
egrep: eyed: No such file or directory
egrep: peas.*;.*$": No such file or directory
egrep: "availables.txt": No such file or directory
答案 0 :(得分:2)
Just Bash
searchfile="file"
read searchterm
shopt -s nocasematch
while read -r line
do
case "$line" in
*"$searchterm"*";"* ) echo "$line";;
esac
done < "$searchfile"
答案 1 :(得分:1)
您需要在此控制分词。这是通过数组完成的。见http://mywiki.wooledge.org/WordSplitting
searchfile="availables.txt"
read searchterm
grep_params=(-i "^.*${searchterm}.*;.*$" $searchfile)
egrep "${grep_params[@]}"
但请勿使用egrep
- 请改用grep -E
,因为第一个已被弃用。
但我会改变你的代码:
searchfile="availables.txt"
read searchterm
grep_params="^.*${searchterm}.*;.*$"
grep -E -i "$grep_params" $searchfile
答案 2 :(得分:0)
您正在寻找的代码如下:
searchfile="availables.txt"
read searchterm
regex="${searchterm}"'.*;'
egrep "${grep_params}" "${searchfile}"
请注意,我简化了你的正则表达式(我希望我做对了!)。
然而,正如Ignacio Vazquez-Abrar指出的那样,在复杂的情况下,这将失败。
答案 3 :(得分:0)
由于这是s正则表达式,请尝试将“”替换为\s
。这代表一个空白字符。
“黑\赛义德\ speas”
答案 4 :(得分:0)
替代方法是通过xargs传递参数:
searchfile="availables.txt"
read searchterm
grep_params="-i '^.*${searchterm}.*;.*$' $searchfile"
echo "$grep_params" | xargs egrep
答案 5 :(得分:0)
我通过在正则表达式中搜索“bash变量”来到这里
我通过将正则表达式分隔符从“/”更改为“+”
来解决它即使它与egrep无关,我也会为其他来自类似搜索的人添加我的解决方案:
SYBASELOG="/opt/sybase/ASE-12_5/install/SYBASE.log"
MAILBODY="Some text and then the replacement placeholder:
[MSGFILE]
and some more text"
# Some proecessing...
MAILBODY=`echo "${MAILBODY}" | sed -e "s+\[MSGFILE\]+"${SYBASELOG}"+"`
是的,我现在看到它与bash没什么关系,与日志文件变量中的斜杠有关。 D'哦!