使用sed或awk,如何从当前行的末尾匹配回指定的字符?

pau*_*op6 2 regex linux bash awk sed

我在文本文件中有一个文件位置列表.例如:

/var/lib/mlocate

/var/lib/dpkg/info/mlocate.conffiles

/var/lib/dpkg/info/mlocate.list

/var/lib/dpkg/info/mlocate.md5sums

/var/lib/dpkg/info/mlocate.postinst

/var/lib/dpkg/info/mlocate.postrm

/var/lib/dpkg/info/mlocate.prerm
Run Code Online (Sandbox Code Playgroud)

我想要做的是使用sed或awk从每行的末尾读取,直到第一个正斜杠(即,从每个文件地址中选择实际的文件名).

我对sed和awk的语法都有些不满.有人可以帮忙吗?

sud*_*03r 5

使用命令basename

$~hawk] basename /var/lib/mlocate
mlocate
Run Code Online (Sandbox Code Playgroud)


Gre*_*con 5

$ sed -e 's!^.*/!!' locations.txt
mlocate
mlocate.conffiles
mlocate.list
mlocate.md5sums
mlocate.postinst
mlocate.postrm
mlocate.prerm

正则表达式量词是贪婪的,这意味着.*匹配尽可能多的输入.将表单模式读.*X作" X字符串中的最后一个".在这种情况下,我们将删除/每行中的所有内容.

我使用了刘海而不是通常的正斜杠分隔符,以避免需要转义我们想要匹配的字面正斜杠.否则,虽然可读性较低的命令是等效的

$ sed -e 's/^.*\///' locations.txt