首页 > 解决方案 > 鱼:在 sed 中转义 `^`

问题描述

在 Fish shell 中,尝试在 in 中逃逸^[^anything]但是sed,它不起作用。

我尝试使用单引号 ( 's///')、双引号 ( "s///"、通过单斜杠或双斜杠 ( /) 进行转义,但没有任何效果。

我想要命令中单引号双引号的解决方案。sed

$ 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' -

标签: escapingfish

解决方案


在 Fish shell 中,尝试在 sed 的 [^anything] 中转义 ^,但是它不起作用。

所以,问题是你不需要^为了鱼的利益而逃避[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 重定向,但仅在标记的开头,并且仅在引号之外。这些都不适用于这里。


推荐阅读