Bash/use sed in variable



我想使用sed来删除和替换bash脚本中的一些字符。

#!/bin/bash
DIR="."
file_extension=".mkv|.avi|.mp4"
files= `find $DIR -maxdepth 1 -type f -regex ".*.(mkv|avi|mp4)" -printf "%fn"`

为了简化$files,我想在其中使用$file_extension,即将。mkv|.avi|.mp4更改为mkv|avi|mp4

如何使用sed ?或者有更简单的选择?

不需要sed;bash有基本的替换算子。替换所有操作的基本语法是${variable//pattern/replacement},但不幸的是,它不能嵌套,所以您需要一个辅助变量。为了清楚起见,我甚至使用两个:

file_extension_without_dot="${file_extension//./}"           # mkv|avi|mp4
file_extension_regex="${file_extension_without_dot//|/\|}"  # mkv|avi|mp4
files= `find $DIR -maxdepth 1 -type f -regex ".*.($file_extension_regex)" -printf "%fn"`

如果你的find支持它,你也可以考虑使用不同的-regextype(参见find -regextype help),这样你就不需要那么多反斜杠了。

最新更新