我有大量文件,每个文件都包含一个带有可变数量参数的 bash 命令。我需要用相应的 API 调用替换它们。
文件中的示例 bash 命令(注意:“-p”参数的数量各不相同,有些没有):
./some_script.sh http://some.server.com -p a=value -p b=value -p c=value
对应的API调用示例
http://some.server.com/api/some/endpoint?a=value&b=value&c=value
我的问题是,鉴于参数的数量是可变的,我似乎无法对每个参数进行分组。
基本正则表达式(这将与上面的示例匹配,但仅对第一个参数进行分组):
.\/some_script.sh\s([\w\/:\.]*)(\s-\w\s[\w=]*)
我尝试过:
.\/some_script.sh\s([\w\/:\.]*)(\s-\w\s[\w=]*)*
但是,这似乎只对最后一个参数进行分组。 (使用 regex101 测试)
理想情况下,我希望这个正则表达式能够将这些文件中不定数量的参数分组,以便我可以轻松地将命令重建为 API 调用。
如果需要更多详细信息,请告诉我,欢迎提出任何建议。
最佳答案
您需要使用\G anchor
/(?|\.\/some_script\.sh\s([\w\/:.]*)|(?!^)\G())\s-(\w)\s([\w=]*)/
https://regex101.com/r/0151qC/1
展开
(?| # Branch reset
\. /some_script \. sh # First, find the script name
\s
( [\w/:.]* ) # (1), url
| # or,
(?! ^ )
\G # Start where last left off
( ) # (1), blank url
)
\s -
( \w ) # (2), - 'p'
\s
( [\w=]* ) # (3), 'a=value'
关于regex - 如何使用正则表达式解析可变长度命令行参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56397493/