2009-09-30 2 views
2

Как извлечь имя файла из пути; У меня есть список файлов. Я использую оболочку csh и устанавливаю awk, sed, perl.извлечь имя файла из пути в оболочке csh - из списка файлов

/dfgfd/dfgdfg/имя_файла

должен дать мне

имя файла

Я попытался BASENAME:

find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h' 
| xargs grep -l pattern | xargs basename 

и он дал мне следующую ошибку:

базовое имя : слишком мало аргументов Попробуйте `basename - help 'для получения дополнительной информации.

ТНХ

ответ

9

Стандартная программа basename делает то, что вы хотите:

$ basename /dfgfd/dfgdfg/filename 
filename 
+0

моя проблема немного отличается, а basename не будет работать. проверьте отредактированный вопрос. – vehomzzz

+2

'basename' работает только на одном имени файла за раз. Замените последнюю часть на 'xargs -n1 basename'. – Thomas

+0

Также попробуйте '-r', чтобы избежать использования' basename' без аргументов, если совпадений нет. – ephemient

1

Такого рода обходной путь работал для меня. Вы сказали, что у вас есть perl, так что это должно бежать. Он заменяет весь небезопасный текст до последнего/ничем (фактически удаляя его).

find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h' 
| xargs grep -l pattern | perl -pi -e "s/\S+\///g" 
0

Хорошо я нашел хорошее решение, используя AWK:

find $PROJECT_DIR -name '*.c' -o -name '*.cc' -o -name '*.h' 
| xargs grep -l PATTERN | awk -F "/" '{print $NF}' 
0
find $PROJDIR -name '*.c' -o -name '*.cc' -o -name '*.h' | xargs grep -l pattern 
| xargs -n1 basename 

попробовать это !!

как базовый параметр accepet accepet как аргумент, поэтому мы вынуждаем xargs разбивать его по одному.

Смежные вопросы