假设某个目录下有一堆以jpeg为后缀的文件名,我们需要在另一个目录中获得他们的文件名,并输出。
可以联合使用ls,awk,sed等命令来完成。
方法一:
使用ls列出目录下以.jpeg为结尾的文件,然后逐个处理每一个,逐个输出。
ls thepath/*.jpeg | awk -F '/' '{print $NF}' | awk -F '.' '{print $1}'
方法二:
最后一步不用awk,而是用sed的替换命令,将‘.jpeg’替换为空。
ls thepath/*.jpeg | awk -F '/' '{print $NF}' | sed 's/\.jpeg\s*$//'
说明:
1、awk主要可以用来对单行分割,分割的后的单个项,可以用$num 来输出,其中num是所要输出的项的列编号。NF是awk的内置变量,表示最后一个项。
2、awk按行处理,尽管ls输出的时候不是把每个文件单行输出的,但是它每输出一个,接着就会紧接着被处理,所以最终结果也是按行的。
3、awk的-F选项用于指定每行中的分割符,可以使用正则表达式,比如可以使用‘[/.]’表示/或者.用来做分割符。但是不要用.第一次来做分割符,因为.可以存在一个文件名中多次。
4、sed也是按行处理文本的,其匹配方式也遵循正则表达式。
5、sed的执行命令s表示的替换的意思,命令中jpeg后面的$表示匹配行末尾。如果文本末尾有空白字符还需要加上\s*
Linux下如何处理包含空格和特殊字符的文件名:http://www.linuxdiyf.com/linux/12838.html
Linux批量修改文件名:http://www.linuxdiyf.com/linux/15608.html