我创建了一个脚本,允许用户通过复制和粘贴该文件来选择该文件。然后对该文件执行 grep。我想知道是否可以在目录中的每个文件前面放置一个数字,以便用户只需键入一个数字。
我尝试过的:
ls -l
然后让ls | wc -l
用户选择相应的文件编号,但运气不好。- 接下来,
ls -i
尝试使用该文件的节点号执行 grep,但没有成功。
答案1
在 中bash
,ksh
您zsh
可以使用select
关键字:
select file in *; do
grep 'something' "$file"
done
select
要在显示列表时给出使用说明,请设置$PS3
前运行select
,例如:
PS3='number of file to grep in, ^C to exit: '
答案2
要将行号放在 ls 前面,最简单的方法可能是
ls -1 | cat -n
然后选择文件号N,你可以尝试
ls -1 | sed -n Np
答案3
顺便说一句,您可以使用 inode 编号并仅使用以下命令ls
:
ls -i
将输出类似:
$ ls -i
13107210 file
13238318 dir
13109301 script.sh
不过与 相比,这个数字还是相当大的cat -n
。但这种方式的主要优点是你总是会找到确切的文件,而使用cat -n
+sed
如果在两个命令之间在你的目录中创建了一些新文件,你可以采取另一个。
答案4
还可以看看 percol、fzy、smenu 和朋友。他们很乐意从标准输入中获取,提供一个带有交互式过滤器的用户友好的选择菜单,然后再次通过管道输出选定的行。