Linux 使用正则表达式查找命令并写入工作异常的文件
Linux find-command with regex and write in a file working strange
所以我有一个包含 .wav 文件的文件夹,如下所示:
afr_(4 digits)_(random digits).wav
我想创建一个列表,其中包含所有以 afr_0184_ 和 afr_1919_ 开头的文件,我使用此 linux 命令行
find /directory/ -name
"arf_0184_*.wav" -o -name "afr_1919_*.wav" > train.list
出于某种原因,列表中只有 afr_1919_ 个文件,就好像它覆盖了之前找到的 afr_0184_ 个文件。
我也试过这个
find /directory/ -name 'afr_(0184|1919)_*.wav' > train.list
但在这种情况下列表是空的。
我做错了什么?
您可以使用
find /directory/ -regextype posix-egrep -regex '.*/afr_(0184|1919)_[0-9]*\.wav' > train.list
要匹配任何 4 位数字变体而不是两个 'hardcoded' 值,请使用
'.*/afr_[0-9]{4}_[0-9]*\.wav'
使用-name
,你只能用通配符模式搜索,你需要-regex
。
使用 -regextype posix-egrep
,您可以使用交替和未转义的捕获括号。 [0-9]*
匹配任何零个或多个数字(将 *
替换为 +
以匹配一个或多个)。
添加 .*/
是因为正则表达式应匹配整个路径字符串。
所以我有一个包含 .wav 文件的文件夹,如下所示:
afr_(4 digits)_(random digits).wav
我想创建一个列表,其中包含所有以 afr_0184_ 和 afr_1919_ 开头的文件,我使用此 linux 命令行
find /directory/ -name "arf_0184_*.wav" -o -name "afr_1919_*.wav" > train.list
出于某种原因,列表中只有 afr_1919_ 个文件,就好像它覆盖了之前找到的 afr_0184_ 个文件。
我也试过这个
find /directory/ -name 'afr_(0184|1919)_*.wav' > train.list
但在这种情况下列表是空的。
我做错了什么?
您可以使用
find /directory/ -regextype posix-egrep -regex '.*/afr_(0184|1919)_[0-9]*\.wav' > train.list
要匹配任何 4 位数字变体而不是两个 'hardcoded' 值,请使用
'.*/afr_[0-9]{4}_[0-9]*\.wav'
使用-name
,你只能用通配符模式搜索,你需要-regex
。
使用 -regextype posix-egrep
,您可以使用交替和未转义的捕获括号。 [0-9]*
匹配任何零个或多个数字(将 *
替换为 +
以匹配一个或多个)。
添加 .*/
是因为正则表达式应匹配整个路径字符串。