sedで単語を置き換える

sedで単語を置き換える

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/>

関連情報