How can we remove text from start to some particular selected word using sed command in linux

Solution 1:

To reverse the effect of your command AND keeping the same part of the string to be matched (assuming that this is the only fix part of the string and you want to get rid of any other part that may vary), you can do :

echo "hello world, I am just simple text for display." | sed 's/^.*\(, I am.*\)/\1/g'

Result :

, I am just simple text for display

What the regular expression is doing :

  • ^.* : matching any character at the beginning of the string until the next expression
  • \( & \) : to catch the part of the string which is matched by the expression in between (must be escaped by \ or they will match the parenthesis character).
  • , I am.* : the match you give us,
  • \1 : will be replaced by the result of the match of the first sub-expression between parenthesis

This way, you have the exact reverse effect of the command in your question, using the same part of the string to do the match.

Solution 2:

You could use the sed option s. The command will be,

echo "hello world, I am just simple text for display."|sed 's/.*, //g'

gives

I am just simple text for display.

Explanation

  • .* matches any number of any characters
  • ,<space> matches , and space
  • So the combination .*,<space> matches everything before , and space including both, and replaces them with nothing.

Solution 3:

$ echo "hello world, I am just simple text for display." | sed 's/^hello world//' , I am just simple text for display.

Explanation: in sed (and elsewhere, like in vim), use carat (^) to indicate start of line. The substitution removes just that text.