Using sed to grab filename from full path?

I landed on the question based on the title: using sed to grab filename from fullpath. So, using sed, the following is what worked for me...

FILENAME=$(echo $FULLPATH | sed -n 's/^\(.*\/\)*\(.*\)/\2/p')

The first group captures any directories from the path. This is discarded.

The second group capture is the text following the last slash (/). This is returned.

Examples:

echo "/test/file.txt" | sed -n 's/^\(.*\/\)*\(.*\)/\2/p'
file.txt

echo "/test/asd/asd/entrypoint.sh" | sed -n 's/^\(.*\/\)*\(.*\)/\2/p'
entrypoint.sh

echo "/test/asd/asd/default.json" | sed -n 's/^\(.*\/\)*\(.*\)/\2/p'
default.json

No need external tools if using GNU find

find /path -name "*.txt" -printf "%f\n"

Something like this should do the trick:

find yourdir -type f -name \*.txt | sed 's/.*\///'

or, slightly clearer,

find yourdir -type f -name \*.txt | sed 's:.*/::'

Why don't you use basename instead?

find /mydir | xargs -I{} basename {}

Tags:

Sed