Delete everything before last / in a file path Delete everything before last / in a file path bash bash

Delete everything before last / in a file path


Using sed for this is vast overkill -- bash has extensive string manipulation built in, and using this built-in support is far more efficient when operating on only a single line.

s=/home/rtz11/files/testfiles/547/prob547455_01basename="${s##*/}"echo "$basename"

This will remove everything from the beginning of the string greedily matching */. See the bash-hackers wiki entry for parameter expansion.


If you only want to remove everything prior to the last /, but not including it (a literal reading of your question, but also a generally less useful operation), you might instead want if [[ $s = */* ]]; then echo "/${s##*/}"; else echo "$s"; fi.


awk '{print $NF}' FS=/ input-file

The 'print $NF' directs awk to print the last field of each line, and assigning FS=/ makes forward slash the field delimeter. In sed, you could do:

sed 's@.*/@@' input-file

which simply deletes everything up to and including the last /.


Meandering but simply because I can remember the syntax I use:

cat file | rev | cut -d/ -f1 | rev

Many ways to skin a 'cat'. Ouch.