tasslebear
tasslebear

Reputation: 209

Conditional replace using sed

My question is probably rather simple. I'm trying to replace sequences of strings that are at the beginning of lines in a file. For example, I would like to replace any instance of the pattern "GN" with "N" or "WR" with "R", but only if they are the first 2 characters of that line. For example, if I had a file with the following content:

WRONG
RIGHT
GNOME

I would like to transform this file to give

RONG
RIGHT
NOME

I know i can use the following to replace any instance of the above example;

sed -i 's/GN/N/g' file.txt
sed -i 's/WR/R/g' file.txt

The issue is that I want this to happen only if the above patterns are the first 2 characters in any given line. Possibly an IF statement, although i'm not sure what the condition would look like. Any pointers in the right direction would be much appreciated, thanks.

Upvotes: 4

Views: 7622

Answers (2)

karakfa
karakfa

Reputation: 67467

just add the circumflex, remove g suffix (unnecessary, since you want at most one replacement), you can also combine them in one script.

sed -i 's/^GN/N/;s/^WR/R/' file.txt

Upvotes: 6

Ed Morton
Ed Morton

Reputation: 203169

Use the start-of-string regexp anchor ^:

sed -i 's/^GN/N/' file.txt
sed -i 's/^WR/R/' file.txt

Since sed is line-oriented, start-of-string == start-of-line.

Upvotes: 2

Related Questions