Sal*_*Sal 6 unix bash scripting sed
我在文件中有许多文件路径,如下所示:
/home/rtz11/files/testfiles/547/prob547455_01
Run Code Online (Sandbox Code Playgroud)
我想使用一个bash脚本,它只会将所有文件名打印到屏幕上.所以基本上是在最后一次/
.我不想假设它总是相同的长度,因为它可能不是.有没有办法在最后一个之前删除所有内容/
?也许是sed
命令?任何帮助将不胜感激!
Cha*_*ffy 27
使用sed
它是一种巨大的过度杀伤 - bash内置了大量的字符串操作,并且使用这种内置支持在仅在一行上运行时效率更高.
s=/home/rtz11/files/testfiles/547/prob547455_01
basename="${s##*/}"
echo "$basename"
Run Code Online (Sandbox Code Playgroud)
这将删除从字符串开头贪婪匹配的所有内容*/
.有关参数扩展,请参阅bash-hackers wiki条目.
如果您只想在最后一个之前删除所有内容/
,但不包括它(对您的问题进行文字阅读,而且通常不太有用的操作),您可能想要if [[ $s = */* ]]; then echo "/${s##*/}"; else echo "$s"; fi
.
Wil*_*ell 13
awk '{print $NF}' FS=/ input-file
Run Code Online (Sandbox Code Playgroud)
'print $ NF'指示awk打印每行的最后一个字段,并指定FS = /使字段分隔符向前斜杠.在sed中,您可以这样做:
sed 's@.*/@@' input-file
Run Code Online (Sandbox Code Playgroud)
它只删除包括最后一个在内的所有内容/
.