golang exec find命令regex

golang exec find命令regex,regex,shell,go,find,Regex,Shell,Go,Find,我正在尝试在go中编写find命令(下面的shell命令): 以下是go代码片段: package main import ( "bytes" "fmt" "os/exec" ) func main() { cmd := exec.Command("/usr/bin/find", "/opt/system/versions", "-mindepth", "3", "-maxdepth", "3",

我正在尝试在go中编写
find
命令(下面的shell命令):

以下是go代码片段:

package main

import (
    "bytes"
    "fmt"
    "os/exec"
)

func main() {

    cmd := exec.Command("/usr/bin/find", "/opt/system/versions",
                        "-mindepth",  "3", "-maxdepth",  "3",
                        "-regex",  ".*(type-a|type-b)/os.*")

    var out bytes.Buffer
    var stderr bytes.Buffer
    cmd.Stdout = &out
    cmd.Stderr = &stderr

    err:= cmd.Run()
    if err != nil {
        fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
        return
    }
    fmt.Println("Directory contents : ", out.String())
}
如果我只搜索
type-a
(或者只搜索
type-b
),效果很好。在搜索
type-a
type-b
时不起作用(shell命令工作正常)。在输入
命令的regex模式中,我犯了什么错误

当我使用
\
转义
|
时,go抱怨转义序列-
未知转义序列:(


默认情况下,
find
将正则表达式解释为,其中,特别是转换运算符是
\\\\
,分组时使用反斜杠和括号
\(
\)
。因此,您应该使用正确的Emacs正则表达式语法,或者在
-regextype
选项的帮助下使用其他正则表达式语法,其中这些运算符的前缀不带反斜杠,例如:

find -regextype 'posix-extended' -regex '.*(type-a|type-b)/os.*'
由于Go中的反斜杠用作字符串中的转义字符,因此应使用额外的反斜杠转义反斜杠字符本身,例如:

cmd := exec.Command("/usr/bin/find", "/opt/system/versions",
                    "-mindepth",  "3", "-maxdepth",  "3",
                    "-regex",  ".*\\(type-a\\|type-b\\)\\/os.*")

您应该转义
|
在Go脚本中,我相信
被解释为
find
命令的shell
pipe
。@bulbus它没有被解释为shell pipe,shell在使用
exec.command
时根本不处理参数。在模式表达式中使用“|”时,这不适用于pgrep Linux命令锡安,看起来像是戈朗的一只虫子。
find -regextype 'posix-extended' -regex '.*(type-a|type-b)/os.*'
cmd := exec.Command("/usr/bin/find", "/opt/system/versions",
                    "-mindepth",  "3", "-maxdepth",  "3",
                    "-regex",  ".*\\(type-a\\|type-b\\)\\/os.*")