Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Bash脚本——正则表达式。regmatch.unix_Regex_Bash - Fatal编程技术网

Regex Bash脚本——正则表达式。regmatch.unix

Regex Bash脚本——正则表达式。regmatch.unix,regex,bash,Regex,Bash,我正在尝试编写一个bash脚本(unix),它可以比较一个文件夹中的文件,将它们与另一个文件夹中的文件进行匹配,并检测是否存在匹配 文件夹中的文件都有一个共同的名称结构,如: *****-dbtableName-*****-YYYY-MM-DD.sql 我尝试将[[a-zA-Z]+\DB[a-Z]+\-[a-zA-Z0-9-\+\.[sql]作为正则表达式。它不起作用 我将非常感谢您的帮助。您尝试过diff吗 diff-q directory1 directory2将报告两个目录中不存在的

我正在尝试编写一个bash脚本(unix),它可以比较一个文件夹中的文件,将它们与另一个文件夹中的文件进行匹配,并检测是否存在匹配

文件夹中的文件都有一个共同的名称结构,如:

*****-dbtableName-*****-YYYY-MM-DD.sql  
我尝试将
[[a-zA-Z]+\DB[a-Z]+\-[a-zA-Z0-9-\+\.[sql]
作为正则表达式。它不起作用

我将非常感谢您的帮助。

您尝试过diff吗

diff-q directory1 directory2
将报告两个目录中不存在的文件或它们是否相同。如果要进一步筛选,您可以始终通过grep传递结果,或者使用
-x
选项从diff中排除特定的文件类型。有关在您的计算机上安装版本。

您是否尝试过不同的版本

diff-q directory1 directory2
将报告两个目录中不存在的文件或它们是否相同。如果要进一步筛选,您可以始终通过grep传递结果,或者使用
-x
选项从diff中排除特定的文件类型。有关计算机上的版本。

假设名称为:barbar-fooDB-bazbaz-2011-06-19。sql匹配可以这样分析:

[a-zA-Z]\+-[a-zA-Z]\+DB-[a-zA-Z]\+-[0-9]\+-[0-9]\+-[0-9]\+\.sql
使用例如
grep

$ echo "barbar-fooDB-bazbaz-2011-06-19.sql" | grep "[a-zA-Z]\+-[a-zA-Z]\+DB-[a-zA-Z]\+-[0-9]\+-[0-9]\+-[0-9]\+\.sql"
barbar-fooDB-bazbaz-2011-06-19.sql   # matched
你可以这样优化它

[a-zA-Z-]\+DB-[a-zA-Z0-9-]\+\.sql
虽然没有那么严格,但仍然匹配正确的文件名

$ echo "barbar-fooDB-bazbaz-2011-06-19.sql" | grep "[a-zA-Z-]\+DB-[a-zA-Z0-9-]\+\.sql"
barbar-fooDB-bazbaz-2011-06-19.sql   # matched
或者如果你喜欢这个例子

$ touch /tmp/barbar-fooDB-bazbaz-2011-06-19.sql
$ ls -1 /tmp/ | grep "[a-zA-Z-]\+DB-[a-zA-Z0-9-]\+\.sql"

这对于处理正则表达式都很好,但对于您的问题,最好采纳Dan的建议,并使用
diff
将其与通配符(如
*.sql
或任何适合您需要的通配符)相结合。

假设名称为:barbar-fooDB-baz-2011-06-19.sql可以这样分析匹配:

[a-zA-Z]\+-[a-zA-Z]\+DB-[a-zA-Z]\+-[0-9]\+-[0-9]\+-[0-9]\+\.sql
使用例如
grep

$ echo "barbar-fooDB-bazbaz-2011-06-19.sql" | grep "[a-zA-Z]\+-[a-zA-Z]\+DB-[a-zA-Z]\+-[0-9]\+-[0-9]\+-[0-9]\+\.sql"
barbar-fooDB-bazbaz-2011-06-19.sql   # matched
你可以这样优化它

[a-zA-Z-]\+DB-[a-zA-Z0-9-]\+\.sql
虽然没有那么严格,但仍然匹配正确的文件名

$ echo "barbar-fooDB-bazbaz-2011-06-19.sql" | grep "[a-zA-Z-]\+DB-[a-zA-Z0-9-]\+\.sql"
barbar-fooDB-bazbaz-2011-06-19.sql   # matched
或者如果你喜欢这个例子

$ touch /tmp/barbar-fooDB-bazbaz-2011-06-19.sql
$ ls -1 /tmp/ | grep "[a-zA-Z-]\+DB-[a-zA-Z0-9-]\+\.sql"


这对于处理正则表达式是很好的,但是对于你的问题,最好采纳Dan的建议,并使用
diff
将其与通配符(如
*.sql
或任何适合你需要的通配符)相结合。

文件名中真的有'*'字符吗?祝你好运。@Sheller基于他提供的正则表达式,似乎
*
意味着ns文件名示例中的任何内容(即文件名本身是正则表达式!:P)文件名中是否真的有'*'字符?祝您好运。@Sheller根据他提供的正则表达式,似乎
*
表示该文件名示例中的任何内容(即文件名本身是正则表达式!:P)