#escaping #fish
#экранирование #fish
Вопрос:
В Fish shell попробуйте выполнить escape ^
в [^anything]
sed
, однако это не сработает.
Я пробовал использовать одинарные кавычки ( 's///'
), двойные кавычки ( "s///"
, экранирование через одинарную или двойную косую черту ( /
), ничего не работает.
Я хотел бы найти решение как для одинарных , так и для двойных кавычек в sed
command.
$ echo 'cd $OLDPWD $argv' | sed $sed_options "s/cd ([^ ]) $argv/cd 1/g" -
$ echo 'cd $OLDPWD $argv' | sed $sed_options 's/cd ([^ ]) $argv/cd 1/g' -
Ответ №1:
В Fish shell попробуйте экранировать ^ в [^что угодно] в sed, однако это не работает.
Итак, дело в том, что вам не нужно экранировать ^
в интересах fish[0].
Если вам нужен инвертированный набор символов, вы должны просто использовать его без обратной косой черты.
Например.
echo abc | sed -e 's/[^a]/ /g'
заменит оба «b» и «c» на » «, потому что ни один из них не является «a».
Я хотел бы найти решение как для одинарных, так и для двойных кавычек в команде sed.
То же самое в одинарных и двойных кавычках.
echo 'cd $OLDPWD $argv' | sed $sed_options "s/cd ([^ ]) $argv/cd 1/g"
[0] Технически версии до fish 3 использовали его для обозначения перенаправлений stderr, но только в начале токена и только вне кавычек. Ни один из которых здесь не применим.
Комментарии:
1. Ну, я попробовал это, и это не сработало. Я понятия не имею, как. Кстати, я установил Fish v3.0.2 в Termux.
echo 'cd $OLDPWD $argv' | sed "s/cd ([^ ]) $argv/cd 1/g" -
выводитcd $OLDPWD $argv
. То же самое с одинарными кавычками.2.
sed
Неверно другими способами —([^ ])
это один символ . Это означает, что это должно было бы выглядеть какcd x $argv
, чтобы соответствовать. Используйте([^ ]*)
«количество символов, которые не являются пробелом.