查找替换并将扩展名附加到字符串

查找替换并将扩展名附加到字符串

您好,我想用于sed以下任务:

我有一个名为的 shell 变量tor=hello:there/you/are/here,我在需要的地方都添加了下划线,以将这个 shell 变量转换为带有下划线的文件名,如下所示:

sed -e 's/[^A-Za-z0-9._-]/_/g' <<< $tor

结果是这样的:

hello_there_you_are_here

但我想添加一个这样的扩展:

hello_there_you_are_here.sif

如何在行尾添加 sed 扩展名?

答案1

正如用户 fpmurphy 在评论中指出的那样,您所需要做的就是向 Sed 添加“一行代码”,表示“匹配行尾并将 a 放在.sif那里”。由于“代码行”添加了-e,所以您得到

sed -e 's/[^[:alnum:].-]/_/g' -e 's/$/.sif/' <<< "$tor"

请注意,我做了一些修改。始终引用变量扩展,使用"$tor"而不是$tor,因为这是好的做法,尽管在当前情况下并不是真正需要的,因为 Bash 不会在此处字符串上执行分词或通配符。此外,[:alnum:]它是一个与标准语言环境相匹配的 POSIX 类[A-Za-z0-9],因此更可靠。例如,参见为什么“字符类”应该优先于“字符范围”?,但将此作为一个小旁注。

相关内容