Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.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使用文件名shell脚本筛选文件_Regex_Linux_Bash_Shell_Sftp - Fatal编程技术网

regex使用文件名shell脚本筛选文件

regex使用文件名shell脚本筛选文件,regex,linux,bash,shell,sftp,Regex,Linux,Bash,Shell,Sftp,尝试根据文件名约定筛选文件 eg: Standard_<number>_<15digitnumber>.xml 输出: 标准_2149190256_151116162725717.xml 标准_2149190257_151116162725717.xml 标准_2149ABCDE_151116162725717.xml 在上面突出显示的输出中,它返回字符串,正如我在中间的数字后面有*一样。我尝试在[0-9]之前和之后放置+以仅包含数字,但该命令无效 ls Standar

尝试根据文件名约定筛选文件

eg: Standard_<number>_<15digitnumber>.xml
输出: 标准_2149190256_151116162725717.xml 标准_2149190257_151116162725717.xml 标准_2149ABCDE_151116162725717.xml

在上面突出显示的输出中,它返回字符串,正如我在中间的数字后面有*一样。我尝试在[0-9]之前和之后放置+以仅包含数字,但该命令无效

ls Standard_[0-9]+_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].xml                                                                                                                             
输出:找不到ls:/somefolder/Standard_[0-9]+[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]

ls Standard_+[0-9]_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].xml                                                                                                                               
输出:找不到ls:/somefolder/Standard.+[0-9].[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]

ls Standard_+[0-9]_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].xml                                                                                                                               

感谢您的帮助。

Bash没有regex,shell有

您将在linux中的命令中使用regex,如,egrep,sed

文件标准_01234_012345678912345.xml

1-正如你所做的

 ls Standard_[0-9]+_[0-9]{15}.xml
 ls: cannot access Standard_[0-9]+_[0-9]{15}.xml: No such file or directory
2-使用egrep

ls -l |egrep Standard_[0-9]+_[0-9]{15}.xml
-rw-r--r-- 1 root   root   0 Oct 24 16:07 Standard_01234_012345678912345.xml
正如您所看到的,regex不是问题所在,而是您在哪里使用。您可以学习globbing或使用egrep、sed、awk代替简单的ls

提示1:[0-9]{15}与重复[0-9]15次相同

提示2:Standard_[0-9]*之所以有效,部分原因是“*”在正则表达式中是通配符,而globbing可以帮助您:

$ printf "%s\n" Standard*
Standard_2149190256_151116162725717.xml
Standard_2149190257_151116162725717.xml
Standard_2149ABCDE_151116162725717.xml

$ shopt -s extglob nullglob

$ printf "%s\n" Standard_+([0-9])_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].xml
Standard_2149190256_151116162725717.xml
Standard_2149190257_151116162725717.xml

这里,+[0-9]匹配一个或多个数字的序列,我们排除了文件标准_2149ABCDE_151116162725717.xml。

ls的问题是它不完全符合regex posix。那就是疯狂。不过,“grep”是兼容的,可以很好地与“ls”配合使用

    ls Standard_*.xml | grep -P [[:digit:]]+_[[:digit:]]{15}

我喜欢perl风格的regexp PCRE,因此它可以解释“grep”命令中奇怪的“-p”。

请查看页面,帮助您正确设置此问题的格式,以便legible@ctwheels谢谢你的回复。我刚刚更新了格式。我尝试使用您提供的命令,结果是所有以标准开头的文件。我没有提到我想在连接到SFTP服务器后执行此命令。下面是我在运行ls命令之前用于连接到SFTP的命令。理想情况下,我必须使用Mget来获取与该文件匹配的所有文件习俗sftp-oIdentityFile=/.ssh/id\u rsa@