如何用另一个文件替换文件中的字符串?

如何用另一个文件替换文件中的字符串?

我有几个文件都包含一个字符串。该字符串需要替换为另一个文件的全部内容(可能是多行)。我怎样才能做到这一点?

我需要的是诸如实际文件在sed -i 's/string/filename/' *哪里filename而不是字符串“文件名”之类的东西。

附加信息:该文件可以包含特殊字符,例如/\|或。[]

答案1

bash 对此效果很好:

$ cat replace
foo/bar\baz
the second line

$ cat file
the replacement string goes >>here<<

$ repl=$(<replace)

$ str="here"

$ while IFS= read -r line; do
    echo "${line//$str/$repl}"
done < file
the replacement string goes >>foo/bar\baz
the second line<<

awk 可以工作,只是它会解释反斜杠转义(\b在我的示例中)

$ awk -v string="here" -v replacement="$(<replace)" '
    {gsub(string, replacement); print}
' file
the replacement string goes >>foo/baaz
the second line<<

答案2

您需要未充分利用的 sed 命令r它读取一个文件:

sed -i '/string/{r filename
                 d}'

我假设您想替换整行,否则将 d 替换为合适的内容。

答案3

我让这个工作:

$ foo='baz'
$ echo "foobarbaz" | sed "s/foo/${foo}/"
bazbarbaz

更进一步,您的第一行将类似于:

$ foo=`cat filename`

当然,这假设您在到达要替换的行之前知道文件名 - 如果您不知道,则必须读取该行,获取文件名,然后执行读取和替换。

相关内容