我有一个env.txt文件,格式如下:
lDRIVER={ODBC Driver 13 for SQL Server};
PORT=1433;
SERVER=serveename;
DATABASE=db;
UID=username;
PWD=password!
我有一个git bash脚本(.sh),需要该文件中的UID和PWD。我正考虑通过最后/第二个最后一个行号来获取它。我该怎么做/有更好的方法(比如寻找UID和PWD并以这种方式分配git bash变量)
答案 0 :(得分:1)
有很多方法可以做到这一点。您可以使用我个人会使用的awk
,因为它有点像x-acto刀用于此类事情:
uid=$(awk -F"[=;]" '/UID/{print $2}' env.txt)
pwd=$(awk -F"[=;]" '/PWD/{print $2}' env.txt)
或grep
和sed
。 sed
很好,因为它可以让你对要从线上剪切的信息非常具体,但是它的正则表达式有它的学习曲线:
uid=$(grep "UID" env.txt | sed -r 's/^.*=(.*)(;|$)/\1/g' )
pwd=$(grep "PWD" env.txt | sed -r 's/^.*=(.*)(;|$)/\1/g' )
正如@JamesK在评论中指出的那样,您可以使用sed
并让它进行搜索而不是grep
。这非常好,我肯定会选择此而不是grep | sed
。
uid=$(sed -nr '/UID/s/^.*=(.*)(;|$)/\1/gp' )
pwd=$(sed -nr '/PWD/s/^.*=(.*)(;|$)/\1/gp' )
或grep
和cut
。 Bleh ...我们都可以做得更好,但有时我们只想grep
和cut
而不必考虑它:
uid=$(grep "UID" env.txt | cut -d"=" -f2 | cut -d";" -f1)
pwd=$(grep "PWD" env.txt | cut -d"=" -f2 | cut -d";" -f1)
我绝对不会按行号去。看起来和odbc.ini文件以及每个odbc条目中列出参数的顺序无关。