Regex匹配路径,不包括最终目录。Perl错误";搜索模式未终止于-e";
假设我有一个目录路径Regex匹配路径,不包括最终目录。Perl错误";搜索模式未终止于-e";,regex,bash,shell,perl,unix,Regex,Bash,Shell,Perl,Unix,假设我有一个目录路径 /abc/de/fgh/i/jk 我只想和你比赛 /abc/de/fgh/i/ 我该怎么做?我试过: (\/.*\/)* 这似乎起到了作用 但是,当我尝试时: path="/abc/de/fgh/i/jk" sliced=`echo $path | perl -pe '(\/.*\/)*'` 我得到一个错误: Search pattern not terminated at -e line 1 除了perl,还有更好的方法吗?这里给出一个perl错误到
/abc/de/fgh/i/jk
我只想和你比赛
/abc/de/fgh/i/
我该怎么做?我试过:
(\/.*\/)*
这似乎起到了作用
但是,当我尝试时:
path="/abc/de/fgh/i/jk"
sliced=`echo $path | perl -pe '(\/.*\/)*'`
我得到一个错误:
Search pattern not terminated at -e line 1
除了perl,还有更好的方法吗?这里给出一个perl错误到底有什么不对?我的正则表达式在这里正确吗 使用
sed
,但要匹配要删除的内容(而不是要保留的内容):
输出/abc/de/fgh/i/
正则表达式匹配结尾处的所有非斜杠字符,并将其替换为零,从而删除它们。有一个coreutil来执行此操作,
dirname
:
path="/abc/de/fgh/i/jk"
sliced=`dirname "$path"`
但是,它也会删除尾随的/
。如果出于任何原因需要它,只需将其附加到切片的中即可:
sliced=`dirname "$path"`/
请务必引用$path
;如果不这样做,它将不适用于包含空格的路径
您的Perl程序无法运行,因为您没有在其周围放置任何正则表达式操作符。它忽略第一个\
,因为它不在字符串或正则表达式中,然后查找以正则表达式开头的/
。因为没有未经scaped的/
来结束它,所以它会给您这个错误。您可能需要类似于s/(\/.\/)*./$1/
的东西,它应该删除上一次/
之后的所有内容,为什么不使用参数扩展
echo "${path%/*}/"
echo "${path%/*}/"