4

我有一个file.txt具有以下结构的文件:-

./a/b/c/sdsd.c
./sdf/sdf/wer/saf/poi.c
./asd/wer/asdf/kljl.c
./wer/asdfo/wer/asf/asdf/hj.c

如何从路径中仅获取 c 文件名。即,我的输出将是

sdsd.c
poi.c
kljl.c
hj.c
4

5 回答 5

4

您可以使用 awk 轻松完成此操作。

设置字段分隔符 FS="/" 和 $NF 将打印每条记录的最后一个字段。

awk 'BEGIN{FS="/"} {print $NF}' file.txt

或者

awk -F/ '{print $NF}' file.txt

或者,您可以像这样使用 cut 和 unix 命令 rev

rev file.txt | cut -d '/' -f1 | rev

于 2012-11-20T10:33:17.703 回答
4

您可以使用basename命令:

basename /a/b/c/sdsd.c

会给你sdsd.c

对于 中的文件列表file.txt,这将执行以下操作:

while IFS= read -r line; do basename "$line"; done < file.txt
于 2012-11-20T10:33:20.070 回答
1

最简单的一个($NF是当前行的最后一列):

awk -F/ '{print $NF}' file.txt

或使用 &参数扩展

while read file; do echo "${file##*/}"; done < file.txt

bashbasename

while read file; do basename "$file"; done < file.txt

输出

sdsd.c
poi.c
kljl.c
hj.c
于 2012-11-20T10:31:59.610 回答
1

Perl 解决方案:

perl -F/ -ane 'print $F[@F-1]' your_file

您也可以使用 sed:

sed 's/.*[/]//g' your_file
于 2012-11-20T10:34:43.007 回答
1

使用sed

$ sed 's|.*/||g' file
sdsd.c
poi.c
kljl.c
hj.c
于 2012-11-20T10:37:13.607 回答