3

Я получил этот псевдоним для поиска файла рекурсивно и без учета регистра

type fr
fr is aliased to `find . | grep -i'

и так скажем, я ищу файл

fr nsstring+util
./Build/Intermediates/SmartTaxi.build/Debug-iphonesimulator/SmartTaxi.build/Objects-normal/i386/NSString+Util.d
./Build/Intermediates/SmartTaxi.build/Debug-iphonesimulator/SmartTaxi.build/Objects-normal/i386/NSString+Util.dia
./Build/Intermediates/SmartTaxi.build/Debug-iphonesimulator/SmartTaxi.build/Objects-normal/i386/NSString+Util.o
./SmartTaxi/Classes/Categories/NSString+Util.h
./SmartTaxi/Classes/Categories/NSString+Util.m

и я хочу, чтобы выбрать последний файл .. без необходимости оставлять keybaord и выделение его и т. д .. есть ли ярлык для этого на cli?

Чтобы быть более конкретным .. весь сценарий - поиск файла - просмотр полученных результатов - в основном выполнить команду на одном из них .. в этом случае я просто хочу запустить

vi SmartTaxi/Classes/Categories/NSString+Util.m

не выходя из клавиатуры

Обновить:

Идея состоит в том, что эта команда должна состоять из двух частей:

  • fr имя файла и вручную увидеть возвращенные результаты .. может быть много результатов, и желаемый может быть в любой из строк
  • vi% результат вышеуказанной команды% в конкретной строке

3 ответа3

2

Не покидая клавиатуры, вы можете выбрать определенные строки с помощью sed и обернуть предыдущую команду в $(...) , например так:

vi "$(fr nsstring+util | sed -ne 3p)"

Чтобы выбрать последнюю строку, вы можете использовать $ вместо конкретного числа, но тогда вам нужно заключить в кавычку команду sed :

vi "$(fr nsstring+util | sed -ne '$p')"

Для более общего назначения вы можете определить функцию:

nvi() { n=$1; shift; vi "$(eval "$*" | sed -n ${n}p)"; }

Затем, чтобы отредактировать 5-ю строку вывода предыдущей команды, вы можете сделать это:

fr nsstring+util
nvi 5 !!
0

По сути, идея состоит в том, чтобы создать функцию, которая может принимать аргументы .. см. Здесь

вот функции:

function fr { find . | grep -in "$1"; }
function vifr { vi "`find . | head -$1 | tail -1`"; }

Пример использования:

$ fr nsstring+util
9675:./Build/Intermediates/SmartTaxi.build/Debug-iphonesimulator/SmartTaxi.build/Objects-normal/i386/NSString+Util.d
9676:./Build/Intermediates/SmartTaxi.build/Debug-iphonesimulator/SmartTaxi.build/Objects-normal/i386/NSString+Util.dia
9677:./Build/Intermediates/SmartTaxi.build/Debug-iphonesimulator/SmartTaxi.build/Objects-normal/i386/NSString+Util.o
10232:./SmartTaxi/Classes/Categories/NSString+Util.h
10233:./SmartTaxi/Classes/Categories/NSString+Util.m

$ vifr 10233 

последние команды делают так же, как

vi ./SmartTaxi/Classes/Categories/NSString+Util.m
0

Если у вас есть dialog то вы можете сделать это:

find . | grep -i "$1" | sed -e '/$/G' | xargs -d'\n' dialog --menu "text" 0 0 0 3>&1 1>&2 2>&3 | xargs vi

Вы можете сделать что-то подобное с zenity если у вас есть только это и вывод X.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .