我正在尝试使用sed进行一些组匹配.
基本上我有这样的事情:
func_name(4234,43543,76,1)
Run Code Online (Sandbox Code Playgroud)
我需要匹配函数的参数:
$ echo 'func_name(4234,43543,76,1)' | sed -n 's/\([0-9][0-9]*\).*/\1 /p'
func_name(4234
$ echo 'func_name(4234,43543,76,1)' | sed -n 's/\([[:digit:]]+\).*/\1 /p'
<empty>
$ echo 'func_name(4234,43543,76,1)'| sed -n 's/.*\([0-9][0-9]*\).*/\1 /p'
1
Run Code Online (Sandbox Code Playgroud)
如果您知道参数的数量并且它们总是"简单"(没有嵌套括号,因此也没有嵌入的逗号),那么:
echo "func_name(4234,53543,76,1)" |
sed 's/.*(\([^,)]*\),\([^,)]*\),\([^,)]*\),\([^,)]*\))/a1 \1; a2 = \2; a3 = \3; a4 = \4/'
Run Code Online (Sandbox Code Playgroud)
请注意,这可以容忍逗号之后的空格(在它们之前也是如此 - 但是之前你不会留空格,是吗?).
或者,如果参数是简单的无符号整数并且您知道函数名称,则可能:
echo "func_name(4234,53543,76,1)" |
sed 's/func_name(\([0-9]*\), *\([0-9]*\), *\([0-9]*\), *\([0-9]*\))/a1 \1; a2 = \2; a3 = \3; a4 = \4/'
Run Code Online (Sandbox Code Playgroud)
要在单个匹配中获取所有参数,您必须执行嵌套分组:
echo "func_name(4234,53543,76,1)" |
sed 's/func_name(\(\([0-9]*\), *\([0-9]*\), *\([0-9]*\), *\([0-9]*\)\))/args = \1/'
Run Code Online (Sandbox Code Playgroud)
现在\2.. \5仍然引用单独的参数.
echo "func_name(4234,53543,76,1)" |
sed 's/func_name(\(\([0-9]*\)\(, *\([0-9]*\)\)\{3\}\))/args = \1/'
Run Code Online (Sandbox Code Playgroud)
这使用repeat控件\{3\}在第一个之后查找参数.
| 归档时间: |
|
| 查看次数: |
13240 次 |
| 最近记录: |