Skip to content
Advertisement

How to add characters in word and replace it using sed command in linux

I have one requirement.

I have one text file named as a.txt, which is having list of words –

JavaScript

Now I have one another file named as b.txt , which is having content as

JavaScript

Like this n of lines are there with different different words.

Then I am writing script file –

JavaScript

So after running script the output file of b.txt file I am expecting is

JavaScript

But the output after running that script I am getting is –

JavaScript

And this output will be saved in b.txt file as I mentioned in sed command

Note – In a.txt I am having the list of Words which I want to replace and in b.txt file I am having paragraphs of line in which I am having words like google. , facebook. and so on.

So that’s why I am not able to give direct sed command for replacement.

I hope that you understand my requirement.

Thanks in advance!

Advertisement

Answer

You can use the following GNU sed solution:

JavaScript

Or, the same without a loop as a single line (as used in anubhava’s answer):

JavaScript

With the script, you

  • while IFS= read -r L; do – read the file line by line, each line being assigned to L
  • sed -i "s/($L)./1_/gI" b.txt – replaces all occurrences of L (captured into Group 1 with the help of capturing (...) parentheses) followed with . (in a case insensitive way due to I flag) in b.txt with the same value as captured in Group 1 and _ appended to it.
  • -f allows passing a list of commands to sed
  • printf 's/\(%s\)\./\1_/gIn' $(<"$FILENAME") creates a list of sed commands, in this case, it looks like
JavaScript
Advertisement