我们已经向你介绍了几个基本的在文本编辑器内阅读文件的 shell 提示下的命令。下面列举了其它几个此类命令。
你可以使用 head 命令来查看文件的开头部分。此项命令是:
head <filename> |
head 是一个有用的命令,但是由于它只限于文件的最初几行,你看不到文件实际上有多长。按照默认设置,你只能阅读文件的前十行。你可以通过指定一个数字选项来改变要显示的行数,如下面的命令所示:
head -20 <filename> |
与 head 命令恰恰相反的是 tail 命令。使用 tail 命令,你可以查看文件结尾的十行。这有助于查看日志文件的最后十行来阅读重要的系统消息。你还可以使用 tail 来观察日志文件被更新的过程。使用 -f 选项,tail 会自动实时地把打开文件中的新消息显示到屏幕上。例如,要活跃地观察 /var/log/messages,以根用户身份在 shell 提示下键入以下命令:
tail -f /var/log/messages |
grep 命令对于在文件中查找指定的字串很有用途。例如,如果你想在 sneakers.txt 文件中查找每一个提到“coffee”的地方,你可以键入:
grep coffee sneakers.txt |
你就会看到文件中带有“coffee”的每一行。
窍门 | |
---|---|
除非另有说明,grep 搜寻是区分大小写(case sensitive)的。这意味着搜寻 Coffee 与搜寻 coffee 不同。在 grep 的选项中有 -i 这一项,它会允许你在搜寻文件时不区分大小写。关于这个命令的详情,请阅读 grep 的说明书(man)页。 |
当你想贮存及(或)打印信息以便以后阅读时,你可以使用管道和输出重导向。
譬如,你可以使用 grep 来搜寻文件中的某一类内容,然后把结果保存在文件中或发送给打印机。
譬如,要打印 sneakers.txt 文件中关于“coffee”的行,只需键入:
grep coffee sneakers.txt | lpr |
如果你忘记了你要找的文件名怎么办?答案是使用通配符或正则表达式。你在不知道完整的文件名的情况下也可以在该文件上执行操作。只需填写你所知的部分,剩余部分用通配符(wildcard)来替代。通配符是特殊符号,你可以用它们来替换字母、数字和符号,这比仔细查阅长目录列表来寻找某个文件要容易得多。
窍门 | |
---|---|
要阅读关于通配符和正则表达式的详情,请看一看 bash 的说明书页(man bash)。请记住,你可以把这个文件存为一个文本文件,方法是键入 man bash | col -b > bash.txt 命令。然后,你便可以使用 less 或 vi(vi bash.txt)来打开并阅读该文件。如果你想打印该文件,请留意它的篇幅很长。 |
我们知道这个文件叫做“sneak____.txt”,因此键入:
ls sneak*.txt |
这就会显示这个文件的全名:
sneakers.txt |
你在搜索时最常使用的可能是星号(*)。这个星号会选出匹配你所搜寻图案的一切。因此即便你键入了:
ls *.txt |
或:
ls sn* |
你会发现 sneakers.txt 以及其它以 sn 开头的文件或以 .txt 结尾的文件。这有助于尽可能地缩小搜寻范围。
要缩小搜寻范围的另一种方法是使用问号(?)。和星号相似,使用 ? 能帮助你定位匹配某一搜寻图案的文件。
然而在这种情况下,? 对匹配单个字符有用,因此如果你搜寻 sneaker?.txt,你会得到 sneakers.txt 这个搜寻结果,以及(或者) sneakerz.txt,如果这个文件存在的话。
正则表达式比直截了当的星号和问号要复杂得多。
譬如,当一个星号恰巧是一个文件名的一部分时,比如说,如果文件 sneakers.txt 实际上叫做 sneak*.txt 的时候,正则表达式就会发挥它的作用了。
使用反斜线(\),你就可以指定你使用星号并不是想搜寻一切,实际上你是在寻找名称中带有星号的文件。
如果这个文件叫做 sneak*.txt,键入:
sneak\*.txt |
下面是通配符和正则表达式的一个简短列表:
* — 匹配所有字符
? — 匹配字串中的一个字符
\* — 匹配“*”字符
\? — 匹配“?”字符
\) — 匹配“)”字符