exchange two words using sed

9,898

Try this one:

sed -r 's/([a-zA-Z0-9]+) ([a-zA-Z0-9]+) ([a-zA-Z0-9]+)/\3 \2 \1/'

Your problem is that you're tryng to use extended regex without -r option or escape symbol in sed command.

Also the regex isn't fully correct.

You're specifying incorrect range: there is no A-z range, there is A-Z.

Also you forgot spaces and you didn't specify that words are multicharacter.

Share:
9,898

Related videos on Youtube

Cucerzan Rares
Author by

Cucerzan Rares

Updated on September 18, 2022

Comments

  • Cucerzan Rares
    Cucerzan Rares over 1 year

    I am trying to exchange two words in a line but it doesn't work. For example: "Today is my first day of university" should be "my is Today first day of university"

    This is what I tried:

    sed 's/\([a-zA-z0-9]\)\([a-zA-z0-9]\)\([a-zA-z0-9]\)/\3\2\1/' filename.txt
    

    What am I doing wrong?

    • rush
      rush about 11 years
      @warl0ck, I'm not sure we should add backslashes into sed command or fix it any other way directly in the question.
    • Runium
      Runium about 11 years
      Why do people keep changing the Q here? The OP has erroneous pattern as @rush points out in answer. This makes answer look out of place - and is no help for poster.
    • Runium
      Runium about 11 years
      Aha. The back-slashes was there, but disappear when not as code block. Thanks @rush for Q on this. Original post plain text.