Мое предположение - это
execve
(который является другой половиной порождения другой программы), ожидая ответ fork
, но они действительно не поняли все это и перепутали два.Этот будет работать со строками с пробелами в нем:
sed 's/\(@"[^"]*"\), \(@"[^"]*"\)/\2, \1/' input.txt
Как это работает:
sed - (s) tream (редактор) itor выполнит (s) ubstosute команду на каждой строке входа,
и замены \(@"[^"]*"\), \(@"[^"]*"\)
с \2, \1
.
\2
средства второе соответствие (от вторых фигурных скобок)
\1
средства сначала соответствуют (от первых фигурных скобок).
Фигурных скобок нужно оставить, таким образом, мы имеем \(
и \)
. Внутри мы ищем @
символ, затем "
символ и затем [^"]
любые символы, отличающиеся, чем "
повторенный в любое время и затем "
символ.
Затем мы ожидаем ,
запятая сопровождается пространством и подобной второй группой для \2
.
Соответствуйте первому полю, разделителю и второму полю, и распечатайте их в обратном порядке. Принятие там не может быть запятыми в двойных кавычках:
sed -e 's/\(.*,\)\( \)\(.*,\)/\3\2\1/'
Awk более неуклюж здесь из-за запятой в конце строки. Тем не менее, можно сделать подкачку путем обработки запятой плюс пространство или / +/
как разделитель полей.
awk -F ', ' '{print $2 " " $1 ","}'
Если могут быть запятые в кавычках, необходимо будет соответствовать полям способом, который берет правила выхода кавычки (если таковые имеются) во внимание.
awk -F ', ' '{print $2 " " $1 ","}'
– Michał Šrajer
12.01.2012, 00:46