将 sed 与正则表达式和 (
Use sed with regex and (
我在 php 文件中有一个函数:
_t('', 'Award received')
我做了一个正则表达式,它找到函数的第一部分 _t(''
现在,我想用其他东西替换那个函数(实际上,我想给函数添加参数)。
来自控制台:
grep -rl "_t('', 'Award received')" application | xargs sed -i "s/_t\s*\(\s*['|\"](\s*\s*)['|\"]/test/g"
Sed 不想进行替换,它说:“( 或 ( 没有一对”,所以看起来它正在尝试在正则表达式中寻找括号...
如何将 sed 与包含方括号的正则表达式一起使用?
编辑:
我有要替换的测试字符串:
_t('124', 'Test')
当我进行简单替换时
sed -i -E 's/124JHGJH/124/g'
它工作正常。
但是如果我尝试用括号和其他替换整个字符串,它就会挂起并且没有响应...
sed -i -E 's/_t\(\'124JHGJH\'/124/g'
注意 sed 正则表达式中 \(
和 (
之间的区别。
要在函数调用结束时添加新参数:
echo "_t('', 'Award received')" | sed 's/_t([^)]\+/&, new_param/'
_t('', 'Award received', new_param)
正则表达式是:
-t(
= 文字字符
[^)]\+
= 一个或多个非)
字符
下一个字符将是函数的闭括号,所以我假设您要在此处插入新参数。我在替换中使用 &
将正则表达式匹配的文本放在原处。
如果存在包含右括号字符的字面字符串参数,这将中断。
在带有正则表达式参数的 sed 中使用标记
sed -r 's/(_t[^)]+)(\))/,new_parameter/g'
`(_t[^)]+)` #matches _t and all characters before the last parenthesis. Mark this pattern
(\)) #matches the last parenthesis and mark this pattern
,new_parameter/ #substitute the first marked pattern, then place the new parameter followed by the second pattern marked, which the the last parenthesis
例子
echo "_t('', 'Award received')"|sed -r 's/(_t[^)]+)(\))/,new_parameter/g'
输出
_t('', 'Award received',new_parameter)
我在 php 文件中有一个函数:
_t('', 'Award received')
我做了一个正则表达式,它找到函数的第一部分 _t(''
现在,我想用其他东西替换那个函数(实际上,我想给函数添加参数)。
来自控制台:
grep -rl "_t('', 'Award received')" application | xargs sed -i "s/_t\s*\(\s*['|\"](\s*\s*)['|\"]/test/g"
Sed 不想进行替换,它说:“( 或 ( 没有一对”,所以看起来它正在尝试在正则表达式中寻找括号...
如何将 sed 与包含方括号的正则表达式一起使用?
编辑: 我有要替换的测试字符串:
_t('124', 'Test')
当我进行简单替换时
sed -i -E 's/124JHGJH/124/g'
它工作正常。
但是如果我尝试用括号和其他替换整个字符串,它就会挂起并且没有响应...
sed -i -E 's/_t\(\'124JHGJH\'/124/g'
注意 sed 正则表达式中 \(
和 (
之间的区别。
要在函数调用结束时添加新参数:
echo "_t('', 'Award received')" | sed 's/_t([^)]\+/&, new_param/'
_t('', 'Award received', new_param)
正则表达式是:
-t(
= 文字字符[^)]\+
= 一个或多个非)
字符
下一个字符将是函数的闭括号,所以我假设您要在此处插入新参数。我在替换中使用 &
将正则表达式匹配的文本放在原处。
如果存在包含右括号字符的字面字符串参数,这将中断。
在带有正则表达式参数的 sed 中使用标记
sed -r 's/(_t[^)]+)(\))/,new_parameter/g'
`(_t[^)]+)` #matches _t and all characters before the last parenthesis. Mark this pattern
(\)) #matches the last parenthesis and mark this pattern
,new_parameter/ #substitute the first marked pattern, then place the new parameter followed by the second pattern marked, which the the last parenthesis
例子
echo "_t('', 'Award received')"|sed -r 's/(_t[^)]+)(\))/,new_parameter/g'
输出
_t('', 'Award received',new_parameter)