答案1
grep
这与外壳所看到的内容和外壳所看到的内容有关。所以,两者都有。
如果您想查看grep
各种形式的引用所看到的内容,请使用,例如:
printf '<%s>\n' G "G" 'G' \G "\G" '\G' \\G "\\G" '\\G'
这将展示什么壳与各种类型的引用有关。
如果grep
只看到G
,它将仅搜索(并根据您的设置突出显示)匹配项G
。
如果grep
看到一个反斜杠后跟一个G
,它将(在您的实现中以及可能所有当前的实现中)认为反斜杠删除了字符 中的任何特殊含义G
。但 没有任何特殊含义G
,因此结果将与刚刚通过一样G
。
如果grep
看到两个反斜杠,第一个反斜杠会删除第二个反斜杠的特殊含义。因此,当grep
see时\\G
,它会搜索文字反斜杠,后跟G
.那就是你想要的。
如果您使用-F
标志 to grep
, 来搜索固定字符串,您可以通过 just\G
并获得相同的结果。 (也就是说,如果你通过\G
这样grep
看到 \G
,这将要求您以某种方式转义反斜杠,以便壳不会删除它。)
答案2
在提到的例子中你提到过\G\\G
\\G
==> 仅被视为 \G。反斜杠将使其视为普通字符串,而不是 Linux 中的特殊含义。因此,第一个反斜杠将使下一个字符串被视为普通字符串。所以第一个反斜杠不会被考虑
如果您想要\\G
作为普通字符串,那么您需要提及为echo "\G\\\G
“
我用下面的例子进行了测试
通过提及以下内容创建了一个文件
猫测试.txt
\G
\\G
如果我只想 grep\G
我将使用下面的命令
grep '^\\G' test.txt
输出
\G
如果我只想 grep"\\G"
我将使用下面的命令
grep '\\\\G' test.txt
输出
\\G
我们可以通过 sed 命令来代替这个
使用以下命令查找包含 \G 的行
sed -n '/^\\G/p' test.txt
对于查找包含\\G
以下命令的行
sed -n '/\\\\G/p' test.txt