我需要运行以下操作,但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,只要能正常工作,我就可以使用其他东西
答案 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