Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在BSD tar路径替换选项中转义字符_Bash_Escaping_Bsdtar - Fatal编程技术网

Bash 如何在BSD tar路径替换选项中转义字符

Bash 如何在BSD tar路径替换选项中转义字符,bash,escaping,bsdtar,Bash,Escaping,Bsdtar,这不起作用: $tar-cf/tmp/z.tar-C/space/myroot-s'/^\.svn\/patches/\uu patches'src.svn/patches tar:无效的正则表达式:尾随反斜杠(\) 也没有好处: $tar-cf/tmp/z.tar-C/space/myroot-s'/^\\\\.svn\\/patches/_patches'src.svn/patches tar:无效的替换标志_ 每一个反斜杠(最多4个)和引用的组合都会给我这两个错误中的一个。但是,我知道

这不起作用:

$tar-cf/tmp/z.tar-C/space/myroot-s'/^\.svn\/patches/\uu patches'src.svn/patches
tar:无效的正则表达式:尾随反斜杠(\)
也没有好处:
$tar-cf/tmp/z.tar-C/space/myroot-s'/^\\\\.svn\\/patches/_patches'src.svn/patches
tar:无效的替换标志_
每一个反斜杠(最多4个)和引用的组合都会给我这两个错误中的一个。但是,我知道第一个在sed中有效:
$tar-cf/tmp/z.tar-C/space/myroot src.svn/patches
$tar-tf/tmp/z.tar | sed's/^\.svn\/patches/u_upatches/'
src/a.c
src/b.c
__补丁
__补丁
我也知道我可以逃避并这样做:
$tar-cf/tmp/z.tar-C/space/myroot-s'/^.svn.patches/_patches'src.svn/patches
--但我真的不想这么做。来自:

-s模式
..
其中old是一个基本正则表达式
...

应与
\/
一起使用。遗憾的是,
bsdtar
在这里写得不正确,无法正确处理转义

发件人:

rule\u text
是一个字符串
char*
,它与传递给
-s
选项的字符串一起传递,因此它具有字符串
/^\.svn\/patches/\u patches
end\u模式
应指向模式的最后一个字符(即指向
/\u补丁
的from中的
/
)。但是,由于使用了简单的strchr,因此将使用找到的第一个
/
字符(
\/
中的字符),无论是否转义,都将使用它。错误:

tar: Invalid regular expression: trailing backslash (\)
来自尝试解析正则表达式
^\.svn\
(因为这是在两个
/
之间剥离的部分)。由于表达式中的尾随反斜杠
\
后面没有任何内容,因此它会抛出一个错误(并且是正确的-尾随反斜杠在那里)。可以考虑向bsdtar开发人员发布错误报告,但它可能并不真正值得修复

请注意,
-s
的语法是
/old/new/
。模式中有一个尾随的
/
,您缺少它。在最后一次
/
之后,可以指定标志

但是,您可以通过以下方式解决此问题:

bsdtar -s '#\.svn/patches#__patches#'
任何字符都适用于
/

来自:

-s模式
..
其中old是一个基本正则表达式
...

应与
\/
一起使用。遗憾的是,
bsdtar
在这里写得不正确,无法正确处理转义

发件人:

rule\u text
是一个字符串
char*
,它与传递给
-s
选项的字符串一起传递,因此它具有字符串
/^\.svn\/patches/\u patches
end\u模式
应指向模式的最后一个字符(即指向
/\u补丁
的from中的
/
)。但是,由于使用了简单的strchr,因此将使用找到的第一个
/
字符(
\/
中的字符),无论是否转义,都将使用它。错误:

tar: Invalid regular expression: trailing backslash (\)
来自尝试解析正则表达式
^\.svn\
(因为这是在两个
/
之间剥离的部分)。由于表达式中的尾随反斜杠
\
后面没有任何内容,因此它会抛出一个错误(并且是正确的-尾随反斜杠在那里)。可以考虑向bsdtar开发人员发布错误报告,但它可能并不真正值得修复

请注意,
-s
的语法是
/old/new/
。模式中有一个尾随的
/
,您缺少它。在最后一次
/
之后,可以指定标志

但是,您可以通过以下方式解决此问题:

bsdtar -s '#\.svn/patches#__patches#'

任何字符都适用于
/

谢谢-我没有想过尝试其他分隔符,因为tar的手册页没有提到它。另外,我问题中缺少的分隔符只是一个剪切/粘贴错误。谢谢-我没有想到尝试其他分隔符,因为tar的手册页没有提到它。另外,我问题中缺少的分隔符只是一个剪切/粘贴错误。