我得到这个别名用于递归搜索文件并且不区分大小写
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
我想选择最后一个文件...而不必离开键盘并突出显示它等...在 CLI 上有没有快捷方式?
更具体地说..整个场景是 - 搜索文件 - 查看检索到的结果 - 基本上对其中一个执行命令..在这种情况下,我只想运行
vi SmartTaxi/Classes/Categories/NSString+Util.m
无需离开键盘
更新:
这个想法是,这个命令必须分两部分完成:
- fr 文件名并手动查看返回的结果。可能有很多结果,所需的结果可能在任何其中一条线
- vi %上述命令的结果% 在特定行
答案1
无需离开键盘,您可以使用 选择特定行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 !!
答案2
基本上,这个想法是创建一个可以接受参数的函数。参见这里
具体功能如下:
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
答案3
如果有的话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 输出,您可以做类似的事情。