如何用具有复杂字符的文本替换文件中的文本?

时间:2018-11-15 21:03:27

标签: text sed replace gnupg

我需要运行以下操作,但bash或zsh终端不喜欢这些字符。如何正确运行?

find ./ -type f -exec sed -i 's/PHRASE=TEST/pwds=`gpg --decrypt ~/test.gpg` & eval "$pwds"/gI' {} \;

PHRASE=TEST需要替换为pwds= gpg --decrypt〜/ test.gpg & eval "$pwds"

我不需要使用sed,只要能正常工作,我就可以使用其他东西

1 个答案:

答案 0 :(得分:1)

没有示例输入和预期输出,我无法验证100%,但是我敢肯定,您只需要转义文件路径中的/&

find ./ -type f -exec sed -i 's/PHRASE=TEST/pwds=`gpg --decrypt ~\/test.gpg` \& eval "$pwds"/gI' {} \;

或者,如果愿意,可以通过更改s命令的定界符来避免第一次转义:

find ./ -type f -exec sed -i 's|PHRASE=TEST|pwds=`gpg --decrypt ~/test.gpg` \& eval "$pwds"|gI' {} \;

示例:

$ cat file.txt
line 1
line 2 PHRASE=TEST
line 3

$ find ./ -type f -exec gsed -i 's/PHRASE=TEST/pwds=`gpg --decrypt ~\/test.gpg` \& eval "$pwds"/gI' {} \;

$ cat file.txt
line 1
line 2 pwds=`gpg --decrypt ~/test.gpg` & eval "$pwds"
line 3