簡體   English   中英

Bash/sed - 在變量中使用 sed

[英]Bash/sed - 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 "%f\n"`

為了簡化$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 "%f\n"`

如果您的find支持它,您還可以考慮使用不同的-regextype (請參閱find -regextype help ),這樣您就不再需要那么多反斜杠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM