sed
実際、Linux正規表現を使用して助けが必要です。
たとえば、行が次の場合は、角かっこの間に2つのパラメータを変更する必要があります。
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/
変える\(
グループ 1 キャプチャ開始mysqli_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
上記の例に基づくおおよその例は次のとおりです。もちろん適応できます。
重要なのは、反転する2つのグループを識別して2番目の部分で使用することです。
$ echo 'mysqli_select_db($par1, $par2)<br/>' | sed 's/mysqli_select_db(\(.*\), \(.*\))/mysqli_select_db(\2, \1)/'
明らかにする
mysqli_select_db($par2, $par1)<br/>