2016-09-29 5 views
0

Я «унаследовал» старый скрипт csh, который работает нормально, но теперь меня попросили что-то улучшить. Теперь я пытаюсь понять, что было запрограммировано несколько лет назад ...понимание sed строк в сценарии csh

В некоторых местах sed использовался для извлечения имен файлов или имен каталогов, и я не могу понять, что там происходит. Возможно, кто-то может и любезно объяснить это мне.

Строки кода являются:

set File = `echo $Dirnames[$i] |sed 's/.*\///'`".bdf" 
set Dir = `echo $Dirnames[$i] | sed 's/\(.*\)\/.*/\1/'` 

Я понимаю, весь код, за исключением СЕПГ частей ...

+0

см http://stackoverflow.com/documentation/regex/topics и http://stackoverflow.com/documentation/sed/topics – Sundeep

+0

также предложить использовать 'basename '$ Dirnames [$ i]" и 'dirname" $ ​​Dirnames [$ i] "' если эти команды доступны – Sundeep

+0

Есть ли какая-либо точка, повторно повторяющая общие знания о том, что вы не должны использовать csh для написания скриптов ? [Google «csh why not»] (https://www.google.com/search?q=csh+why+not&ie=utf-8&oe=utf-8). –

ответ

1

Предполагая, что Dirname[$i] присваивается путь к файлу:

  • sed 's/.*\///': удаляет от пути любые символы до последней косой черты .*\/. Оставшаяся часть пути (т.е. файла) отражается с помощью расширения .bdf
  • s/\(.*\)\/.*/\1/: выводит путь к файловой директории. Все символы до последнего / захватываются \(.*\) и вывод с помощью обратной ссылки \1

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

  • Нет связанных вопросов^_^