Linux 访问远程机器&;Unix平台下文件的grep多字符串模式
当我尝试使用多个字符的“egrep”或“grep-e”时,我面临一个问题 远程计算机中的字符串模式 例如: 将主机看作Serv1.1./P>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引号替换为单引号,并用双引号包围整
- 以下选项适用于单一模式: 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。这对我来说非常有效:)