Linux 如何使用awk打印路径文件名的尾部

Linux 如何使用awk打印路径文件名的尾部,linux,awk,Linux,Awk,我搜索过,但没有成功 我有一个Paths的文件。 我想打印所有路径的尾部。 例如(对于文件中的每一行): 有人知道怎么做吗 谢谢这个awk echo "/homes/work/abc.txt" | awk '{sub(/.*\//,x)}1' abc.txt 由于*是贪婪的,它将一直持续到最后一次/ 所以在这里,我们用x删除所有直到最后一个/,因为x是空的,所以不提供任何内容 雷神版 echo "/homes/work/abc.txt" | awk -F/ '$0=$NF' abc.txt

我搜索过,但没有成功

我有一个Paths的文件。 我想打印所有路径的尾部。 例如(对于文件中的每一行):

有人知道怎么做吗


谢谢

这个
awk

echo "/homes/work/abc.txt" | awk '{sub(/.*\//,x)}1'
abc.txt
由于
*
是贪婪的,它将一直持续到最后一次
/

所以在这里,我们用
x
删除所有直到最后一个
/
,因为
x
是空的,所以不提供任何内容


雷神版

echo "/homes/work/abc.txt" | awk -F/ '$0=$NF'
abc.txt
注意:对于
/homes/work/0
0,0
等,这将失败,因此最好使用:

echo "/homes/work/abc.txt" | awk -F/ '{$0=$NF}1'

awk
解决方案已经由@Jotne和@bashophil提供

以下是一些其他的变化(只是为了好玩)


使用
sed

sed 's:.*/::' file

使用
grep

grep -oP '(.*/)?\K.*' file

使用
cut
-由@Thor添加


使用
basename
——由@fedorqui和@EdMorton建议

而IFS=read-r行;做
basename“$line”
完成<文件
将给出以下输出:

abc1.txt
abc2.txt
abc3.txt
用于:


可以缩短一些
awk-F/'{print$NF}'
@Jotne:或
awk-F/'$0=$NF'
@Thor非常漂亮的indeedThanks!$NF代表什么?@Thor This
awk-F/'$0=$NF'
将对值
0
失败,因此它必须是
awk-F/'{$0=$NF}1'
(请参阅我的更新帖子)@fedorqui谢谢你的建议!添加到解决方案中。注意,在我建议的版本中,如果文件路径有空格,它不会失败,因为在调用
basename
时引用变量可以避免它。@fedorqui这很酷。实际上,我之前也尝试过同样的方法,但可能没有引用,所以决定使用
xargs
,因为生成的结果是相同的。现在我已经消除了这种坏习惯。这很有趣。谢谢:)如果文件名包含反斜杠或以空格开头,循环将失败。当IFS=read-r行时,始终使用us
,除非您有非常具体的理由不这样做。显然,如果文件名包含换行符,这种方法根本不起作用,但这是另一种蠕虫。如果文件包含
/usr/bin/
,您希望发生什么?
rev file | cut -d/ -f1 | rev
while IFS= read -r line; do 
  basename "$line" 
done < file
awk -F "/" '{print $NF}' input.txt
abc1.txt
abc2.txt
abc3.txt
$>cat input.txt
text path/to/file/abc1.txt
path/to/file/abc2.txt
path/to/file/abc3.txt