xargs помогает выполнять команды в строках вывода, например:
find. -name '*.mp3' | xargs mp3info
для каждого файла, найденного с помощью find (, т.е. строка вывода)
mp3info <filename>
выполняется
Если вы хотите что-то сделать с целыми выводами find, вам вообще не нужны xargs.
Более педантичный подход с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 и закрытие)
Это грубый пример, основанный на приведенном выше примере. Можно, конечно, приспособиться.
Суть в том, чтобы определить две группы, которые вы хотите инвертировать, и использовать их во второй части.
$ echo 'mysqli_select_db($par1, $par2)<br/>' | sed 's/mysqli_select_db(\(.*\), \(.*\))/mysqli_select_db(\2, \1)/'
приводит к
mysqli_select_db($par2, $par1)<br/>
Вы можете использовать:
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/>