gpt4 book ai didi

bash - sed 模式匹配不起作用

转载 作者:行者123 更新时间:2023-11-29 09:42:21 24 4
gpt4 key购买 nike

我正在尝试创建一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com