gpt4 book ai didi

BASH表达式在一次操作中替换字符串的开头和结尾?

转载 作者:行者123 更新时间:2023-11-29 09:49:36 25 4
gpt4 key购买 nike

这是一个困扰我一段时间的简单问题。我经常发现我在某个目录中有许多输入文件,我想通过替换开始和结束部分来构造输出文件名。例如,鉴于此:

source/foo.c
source/bar.c
source/foo_bar.c

我经常以这样的 BASH 表达式结束:

for f in source/*.c; do
a="obj/${f##*/}"
b="${a%.*}.obj"
process "$f" "$b"
done

生成命令

process "source/foo.c"    "obj/foo.obj"
process "source/bar.c "obj/bar.obj"
process "source/foo_bar.c "obj/foo_bar.obj"

上面的方法有效,但它比我喜欢的要冗长得多,我宁愿避免使用临时变量。理想情况下,会有一些命令可以一次性替换字符串的开头和结尾,这样我就可以编写如下内容:

for f in source/*.c; do process "$f" "obj/${f##*/%.*}.obj"; done

当然,以上是行不通的。有谁知道会发生什么?我只是想节省一些在这里打字的时间。

最佳答案

不是世界上最漂亮的东西,但是你可以用正则表达式把你想挑出来的内容分组,然后引用BASH_REMATCH数组:

if [[ $f =~ ^source/(.*).c$ ]] ; then f="obj/${BASH_REMATCH[1]}.o"; fi

关于BASH表达式在一次操作中替换字符串的开头和结尾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2695992/

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