2016-12-23 1 views
-1

Я новичок в Sed, я пытаюсь изучить некоторые шаблоны с использованием Sed. я получил filenamne.txt, который имеет следующую запись:Обмен столбцами в bash с использованием SED без использования цикла

ррр/JJJ QQQ/KKK ррр/LLL

Моя цель состоит в том, чтобы поменять слово перед косой чертой и слово после косой черты в каждом из трех WORD1/word2 колонок:

JJJ/ррр KKK/QQQ LLL/ррр

Я пробовал использовать sed –re ‘s!(.*)(/)(.*)!\1\2\!’ filename.txt, но это не сработало. Любая идея, как я могу это сделать?

+1

'\ 1 \ 2' сохраняет столбцы в том же порядке. Это должно быть '\ 2 \ 1', чтобы обменять их. – Barmar

ответ

1
$ echo "ppp/jjj qqq/kkk rrr/lll" | sed -e 's/$/ /' -e 's!\([^/]*\)/\([^ ]*\) !\2/\1 !g' 
jjj/ppp kkk/qqq lll/rrr 
+1

Вы добавляете пространство, которое можно удалить для очистки. Возможно, вам не удастся добавить пространство, если вы использовали положительный класс символов, такой как '[a-zA-Z]', который бы соответствовал этому примеру, но это зависит от того, как выглядит реальное, а не пример. –

1

Использование замены в perl командной строки намного более прямолинейно: -

perl -pe 's/(\w+)\/(\w+)/$2\/$1/g' file 
jjj/ppp kkk/qqq lll/rrr 
+1

Это не более прямолинейно, чем эквивалент GNU sed: 'sed -E 's # (\ w +)/(\ w +) # \ 2/\ 1 # g' file' –

0
$ sed 's#\([^ ]*\)/\([^ ]*\)#\2/\1#g' file 
jjj/ppp kkk/qqq lll/rrr