Как заменить текст в файлах текстом со сложными символами? - PullRequest
0 голосов
/ 16 ноября 2018

Мне нужно выполнить операцию ниже, но терминалу 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 голосов
/ 16 ноября 2018

Без примера ввода и ожидаемого вывода я не могу проверить 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
...