0

我和一个朋友正在做一个项目,我们必须创建一个可以进入文件的脚本,并使用 Sed 将某个表达式/单词/字母的所有出现替换为另一个。它旨在通过多次测试来替换所有这些事件,我们不知道它们会是什么,所以我们必须预测任何事情。我们在某个测试中遇到了麻烦,我们需要使用循环将不同文件中的 'l*' 替换为 'L'。我拥有的代码是

#!/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

我曾尝试在包含不同单词和“l*”的练习文件上对此进行测试,但每当我测试它时,它都会删除文件中的所有文本。有人可以帮我解决这个问题,我们希望尽快完成。谢谢

4

1 回答 1

2

看起来您正在尝试设置Ap1所有特殊字符都已转义的版本。但是您p1稍后使用而不是A. 尝试使用变量A,并尝试在没有临时文件的情况下设置它:

A=$( echo "$p1" | sed -e 's/\([*.[^$]\)/\\\1/g' )
于 2012-08-14T20:04:07.193 回答