regex 从javascript文件中的所有函数获取特定参数

ruarlubt  于 2023-01-18  发布在  Java
关注(0)|答案(1)|浏览(83)

示例输入文件

function getRepoReviewers(gitHost, repoURL) {
     return {
          method: 'GET', headers: "",
          url: `v1/api/code/${gitHost}/reviewers/${repoURL}`
     }
}

function getRepoBranches(gitHost, repoURL) {
     return {
          method: 'GET', headers: "",
          url: `v1/api/code/${gitHost}/branches/${repoURL}`
     }
}

要获取的预期输出

GET, v1/api/code/${gitHost}/reviewers/${repoURL}
GET, v1/api/code/${gitHost}/branches/${repoURL}

我尝试在下面的shell脚本的帮助下使用下面的正则表达式逐行读取,但无法得到想要的结果。

for entry in "$1"/*
do
  var=$(tr '´' "'" < $entry);
  printf "%s" "$var" > file.txt;
  list1=$(grep -o "[^']*v1[^']*" file.txt);
  list2=$(grep -o "[^']*v2[^']*" file.txt);
  echo "$list1" >> api_endpoints_bat_api.csv
  echo >> api_endpoints_bat_api.csv
  echo "$list2" >> api_endpoints_bat_api.csv
  echo >> api_endpoints_bat_api.csv
done
jrcvhitl

jrcvhitl1#

下面是一个使用管道的单行程序:

cat test.js |\
 egrep 'method:|url:' |\
 perl -pe 'BEGIN{undef $/} s/\s+url:/ url:/g' |\
 grep '.' |\
 tr '`' "'" |\
 perl -pe "s/.*method: '([^']*)'.*url: '([^']*).*/\1,\2/"

随文件一起输出:

GET,v1/api/code/${gitHost}/reviewers/${repoURL}
GET,v1/api/code/${gitHost}/branches/${repoURL}

说明:

  • egrep:仅使用感兴趣的行
  • 第1次perl:将url行与前一行连接起来,BEGIN{undef $/}命令perl进入多行模式
  • grep:仅使用非空行
  • tr:将原报价更改为'
  • 第二个perl:仅捕获和使用方法和url

顺便说一句,如果你想把这个输入到.csv文件中,你应该省略逗号后面的空格。

相关问题