我需要帮助sed
,实际上是 Linux 正则表达式:
我需要更改括号之间的两个参数,例如,如果该行是
mysqli_select_db($par1, $par2)<br/>
我需要将其更改为
mysqli_select_db($par2, $par1)<br/>
我需要一些通用的东西,它们并不总是会是par1
和par2
。
答案1
一种更迂腐的方法sed
:
sed 's/\(mysqli_select_db(\)\([^,]*\)\(,[[:space:]]*\)\([^)]*\))/\1\4\3\2)/g' file
s/
代替\(
开始捕获组 1mysqli_select_db(
匹配文字字符串\)
结束捕获组 1\(
开始捕获组 2[^,]*
匹配任何非逗号字符\)
结束捕获组 2\(
开始捕获组 3,[[:space:]]*
匹配逗号和可选空格字符\)
结束捕获组 3\(
开始捕获组 4[^)]*
匹配任何非)
字符\)
结束捕获组 4)
关闭)
命令/\1\4\3\2)/g
替换为捕获组 1、4、3、2 并关闭)
答案2
您可以使用:
sed -E 's/(.*\()(.*), (.*)(\).*)/\1\3, \2\4/g' file_name
例如
echo 'mysqli_select_db($par1, $par2)<br/>' | sed -E 's/(.*\()(.*), (.*)(\).*)/\1\3, \2\4/g'
输出如下:
mysqli_select_db($par2, $par1)<br/>
答案3
这是基于您上面的示例的一个粗略示例。你当然可以适应。
关键是确定要反转的两个组并在第二部分中使用它们。
$ echo 'mysqli_select_db($par1, $par2)<br/>' | sed 's/mysqli_select_db(\(.*\), \(.*\))/mysqli_select_db(\2, \1)/'
结果是
mysqli_select_db($par2, $par1)<br/>