'sed replacing first occurence of characters in each line of file only if they are first 2 characters

Is it possible using sed to replace the first occurrence of a character or substring in line of file only if it is the first 2 characters in the line?

For example we have this text file:

15 hello
15 h15llo
1 hello
1 h15loo 

Using the following command: sed -i 's/15/0/' file.txt

Will give this output

0 hello
0 h15llo
1 hello
1 h0loo 

What I am trying to avoid is it considering the characters past the first 2. Is this possible?

Desired output:

0 hello
0 h15llo
1 hello
1 h15loo 


Solution 1:[1]

You can use

sed -i 's/^15 /0 /' file.txt
sed -i 's/^15\([[:space:]]\)/0\1/' file.txt
sed -i 's/^15\(\s\)/0\1/' file.txt

Here, the ^ matches the start of string position, 15 matches the 15 substring and then a space matches a space.

The second and third solutions are the same, instead of a literal space, they capture a whitespace char into Group 1 and the group value is put back into the result using the \1 placeholder.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Wiktor Stribiżew