Замените первое слово на третье в каждой строке, но слова отделяются ":" - PullRequest
1 голос
/ 25 марта 2019

Я пытаюсь выучить sed, но застреваю при попытке заменить первое слово третьим.Я думал о приведенном выше коде, но он не работает.Кроме того, есть ли способ разбить строку, если слова разделены ":" с помощью sed?

sed "s/\(^[a-z,0-9]*\) \(.*\) \([a-z,0-9]*\)/\1 \2 \1/"

1 Ответ

2 голосов
/ 25 марта 2019

Из вашего комментария ниже кажется, что вы на самом деле хотите заменить третье слово первым, а не наоборот. Если так, то:

$ echo 'first:second:third' | sed 's/\(\([^:]*\).*:\).*/\1\2/'
first:second:first

или если у вас есть много полей для манипуляции:

$ echo 'first:second:third' | sed 's/\([^:]*\):\([^:]*\):\([^:]*\)/\1:\2:\1/'
first:second:first

но вы все равно должны использовать awk для всего, что связано с полями:

$ echo 'first:second:third' | awk 'BEGIN{FS=OFS=":"} {$3=$1} 1'
first:second:first
...