我试图遍历文件中的每一行,找到并提取以开头${和结尾的字母}.所以作为我期待的最终输出SOLDIR和TEMP(来自inputfile.sh).
我尝试使用以下脚本,但它似乎匹配并仅提取模式的第二次出现TEMP.我也尝试g在最后添加,但它没有帮助.有人可以告诉我如何在同一行上匹配和提取两个/多个事件?
inputfile.sh:
.
.
SOLPORT=\`grep -A 4 '\[LocalDB\]' \${SOLDIR}/solidhac.ini | grep \${TEMP} | awk '{print $2}'\`
.
.
Run Code Online (Sandbox Code Playgroud)
script.sh:
infile='inputfile.sh'
while read line ; do
echo $line | sed 's%.*${\([^}]*\)}.*%\1%g'
done < "$infile"
Run Code Online (Sandbox Code Playgroud)
Lev*_*sky 11
我可以提出grep解决方案吗?
grep -oP '(?<=\${).*?(?=})'
Run Code Online (Sandbox Code Playgroud)
它使用Perl风格的外观断言,并且懒惰地匹配'${'和之间的任何内容'}'.
我得到了你的生产线
$ echo "SOLPORT=\`grep -A 4 '[LocalDB]' \${SOLDIR}/solidhac.ini | grep \${TEMP} | awk '{print $2}'\`" | grep -oP '(?<=\${).*?(?=})'
SOLDIR
TEMP
Run Code Online (Sandbox Code Playgroud)