user1598717
user1598717

Reputation: 3

Problems with shell scriptings using Sed

Me and a friend are working on a project, and We have to create a script that can go into a file, and replace all occurances of a certain expression/word/letter with another using Sed. It is designed to go through multiple tests replacing all these occurances, and we don't know what they will be so we have to anticipate anything. We are having trouble on a certain test where we need to replace 'l*' with 'L' in different files using a loop. The code that i have is

#!/bin/sh
p1="$1"

shift

p2="$1"

shift

for file in "$@" #for any file in the directory
do
   # A="$1"

    #echo $A
    #B="$2"
    echo "$p1" | sed -e 's/\([*.[^$]\)/\\\1/g' > temporary #treat all special characters as plain text
    A="`cat 'temporary'`"
    rm temporary
    echo "$p1"
    echo "$file"
    sed "s/$p1/$p2/g" "$file" > myFile.txt.updated #replace occurances 
    mv myFile.txt.updated "$file"
    cat "$file"
done

I have tried testing this on practice files that contain different words and also 'l*' But whenever i test it, it deletes all the text in the file. Can someone help me with this, we would like to get it done soon. Thanks

Upvotes: 0

Views: 127

Answers (1)

William Pursell
William Pursell

Reputation: 212248

It looks like you are trying to set A to a version of p1 with all special characters escaped. But you use p1 later instead of A. Try using the variable A, and also try setting it without a temporary file:

A=$( echo "$p1" | sed -e 's/\([*.[^$]\)/\\\1/g' )

Upvotes: 2

Related Questions