使用sed/regex在同一行上提取多个匹配项

use*_*603 12 regex sed

我试图遍历文件中的每一行,找到并提取以开头${和结尾的字母}.所以作为我期待的最终输出SOLDIRTEMP(来自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)