Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.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 提取与模式匹配的文件名,删除重复项并存储在数组中_Regex_Linux_Bash_Shell_Unix_Sed - Fatal编程技术网

Regex 提取与模式匹配的文件名,删除重复项并存储在数组中

Regex 提取与模式匹配的文件名,删除重复项并存储在数组中,regex,linux,bash,shell,unix,sed,Regex,Linux,Bash,Shell,Unix,Sed,我想知道最简单的方法列出一部分文件名,而不在目录中出现任何重复 例如: 目录包含如下文件: Stack1_over_flow.txt Stack2_exchange.txt Meta_stack.txt Stack1_over_flow.txt Meta_stack.txt 现在我希望结果是: Stack1 Stack2 Meta 在这里,提取在第一次出现“\u1”之前出现的字符串,并删除该字符串的任何重复 ls -1 | awk '{split($0,a,"_"); print a[1]}

我想知道最简单的方法列出一部分文件名,而不在目录中出现任何重复

例如:

目录包含如下文件:

Stack1_over_flow.txt
Stack2_exchange.txt
Meta_stack.txt
Stack1_over_flow.txt
Meta_stack.txt
现在我希望结果是:

Stack1
Stack2
Meta
在这里,提取在第一次出现“\u1”之前出现的字符串,并删除该字符串的任何重复

ls -1 | awk '{split($0,a,"_"); print a[1]}' | sort -b | uniq
仅文件,带查找:

find . -maxdepth 1 -type f -printf "%f\n" | awk '{split($0,a,"_"); print a[1]}' | sort -b | uniq
仅文件,带查找:

find . -maxdepth 1 -type f -printf "%f\n" | awk '{split($0,a,"_"); print a[1]}' | sort -b | uniq
使用

使用

你甚至可以试试这个

ls -1 | cut -d "_" -f1 | uniq
你甚至可以试试这个

ls -1 | cut -d "_" -f1 | uniq

谢谢我期待着一个具有最少bash调用的单行命令。它起作用了!应该有用。我建议在uniq之前使用sort,以确保结果实际上是唯一的。如果您选择的不是前缀,则无法保证这一点。但是有没有办法尝试使用sed而不是awk?@Langdon Yes-请参阅其他答案。@correct\u respondetur:即使存在目录,命令也会列出。可以只列出文件而不列出目录吗?谢谢。我期待着一个具有最少bash调用的单行命令。它起作用了!应该有用。我建议在uniq之前使用sort,以确保结果实际上是唯一的。如果您选择的不是前缀,则无法保证这一点。但是有没有办法尝试使用sed而不是awk?@Langdon Yes-请参阅其他答案。@correct\u respondetur:即使存在目录,命令也会列出。是否可以只列出文件而不列出目录?该命令不会在第一次出现“\u0”之前显示字符串,而是显示完整的文件名。works:),但即使目录名没有“\u0”,它也会显示目录。是否可以只显示文件?@Langdon您可以将
ls-l
替换为
find-maxdepth 1-键入f
该命令将显示完整的文件名(works:),而不是在第一次出现“\ux”之前显示字符串,但即使目录名没有“\ux”,它也会显示目录。是否可以只显示文件?@Langdon您可以将
ls-l
替换为
find-maxdepth 1-类型f