我正在尝试创建一个 bash 脚本来自动提取 tar 文件,但我的 sed 正则表达式未按预期运行。如果我这样做:
archive=$1
directory=$(sed "s/.tar.bz2$//" <<< $archive)
echo "extracting $archive to $directory"
我明白了:
$ sh extract binutils-2.27.tar.bz2
extracting binutils-2.27.tar.bz2 to binutils-2.27
这符合预期。
但如果我这样做:
archive=$1
directory=$(sed "s/.tar.[a-z0-9]{2,3}$//" <<< $archive)
echo "extracting $archive to $directory"
这就是我想要做的(以便处理任何类型的存档),我希望得到相同的输出,但我得到:
$ sh extract binutils-2.27.tar.bz2
extracting binutils-2.27.tar.bz2 to binutils-2.27.tar.bz2
如您所见,正则表达式不适用。
我已经在 regex101.com 上测试了我的正则表达式,它似乎是正确的,但它似乎在 bash 脚本中无法正常工作。有人可以指出我出了什么问题的正确方向吗?
我使用的是 Mint 17.3。
最佳答案
基于 sed
的解决方案是:
directory=$(sed -E 's/\.tar\.[a-z0-9]{2,3}$//' <<< $archive)
但是,根据一些假设,您只能使用 bash
功能:
directory=${archive%.tar.*}
关于bash - sed 模式匹配不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44473158/