Linux 访问远程机器&;Unix平台下文件的grep多字符串模式

Linux 访问远程机器&;Unix平台下文件的grep多字符串模式,linux,shell,unix,ssh,Linux,Shell,Unix,Ssh,当我尝试使用多个字符的“egrep”或“grep-e”时,我面临一个问题 远程计算机中的字符串模式 例如: 将主机看作Serv1.1./P> 以下选项适用于单一模式: ssh server1 grep“STRING1”/tmp/file.txt 以下具有多个模式的操作不起作用。请获取以下错误: ssh server1 egrep“STRING1 | STRING2”/tmp/file.txt bash:STRING2:未找到命令 提前谢谢 只需将dobule引号替换为单引号,并用双引号包围整

当我尝试使用多个字符的“egrep”或“grep-e”时,我面临一个问题 远程计算机中的字符串模式

例如: 将主机看作Serv1.1./P>
  • 以下选项适用于单一模式:

    ssh server1 grep“STRING1”/tmp/file.txt

  • 以下具有多个模式的操作不起作用。请获取以下错误:

    ssh server1 egrep“STRING1 | STRING2”/tmp/file.txt

    bash:STRING2:未找到命令


提前谢谢

只需将dobule引号替换为单引号,并用双引号包围整个命令即可

ssh server1 "egrep 'STRING1|STRING2' /tmp/file.txt"

通常最好将要在远程主机上运行的命令括在引号中或此处的文档中,以避免本地bash解释器插入字符

ssh server1“grep-E'STRING1 | STRING2'/tmp/file.txt”

-E
:将模式解释为扩展正则表达式


编辑:我最初的回答是错误的,因为本地shell在将引号字符串传递到远程shell之前删除了引号,正如@tripleee所解释的,我还删除了
-p
,因为它不可移植。

Hi@ZeppRock,这两种方法都有效。正在获取此“bash:STRING2:command not found”。@sarav您使用的是哪个版本的grep?您可以使用
grep--version
进行检查。我使用的是“grep(GNU-grep)2.20”。这与
grep
版本无关。问题是,本地shell在将带引号的字符串传递给远程shell之前,会删除该字符串周围的引号。(推荐
grep-P
在这里是个糟糕的建议;它不可移植,也不会简化任何东西,也不会为这个特定的用例公开有用的特性。)谢谢@Andrea Binda。这对我来说非常有效:)