我们已经向你介绍了几个基本的在文本编辑器内阅读文件的 shell 提示下的命令。下面列举了其它几个此类命令。
13.11.1. head 命令你可以使用 head 命令来查看文件的开头部分。此项命令是:
head <filename>head 是一个有用的命令,但是由于它只限于文件的最初几行,你看不到文件实际上有多长。按照默认设置,你只能阅读文件的前十行。你可以通过指定一个数字选项来改变要显示的行数,如下面的命令所示:
head -20 <filename> 13.11.2. tail 命令与 head 命令恰恰相反的是 tail 命令。使用 tail 命令,你可以查看文件结尾的十行。这有助于查看日志文件的最后十行来阅读重要的系统消息。你还可以使用 tail 来观察日志文件被更新的过程。使用 -f 选项, tail 会自动实时地把打开文件中的新消息显示到屏幕上。例如,要活跃地观察 /var/log/messages ,以根用户身份在 shell 提示下键入以下命令:
tail -f /var/log/messages 13.11.3. grep 命令grep 命令对于在文件中查找指定的字串很有用途。例如,如果你想在 sneakers.txt 文件中查找每一个提到“coffee”的地方,你可以键入:
grep coffee sneakers.txt你就会看到文件中带有“coffee”的每一行。
窍门:除非另有说明, grep 搜寻是 区分大小写(case sensitive) 的。这意味着搜寻 Coffee 与搜寻 coffee 不同。在 grep 的选项中有 -i 这一项,它会允许你在搜寻文件时不区分大小写。关于这个命令的详情,请阅读 grep 的说明书(man)页。
13.11.4. I/O 重导向和管道当你想贮存及(或)打印信息以便以后阅读时,你可以使用管道和输出重导向。
譬如,你可以使用 grep 来搜寻文件中的某一类内容,然后把结果保存在文件中或发送给打印机。
譬如,要打印 sneakers.txt 文件中关于“coffee”的行,只需键入:
grep coffee sneakers.txt lpr 13.11.5. 通配符和正则表达式如果你忘记了你要找的文件名怎么办?答案是使用通配符或正则表达式。你在不知道完整的文件名的情况下也可以在该文件上执行操作。只需填写你所知的部分,剩余部分用 通配符(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下面是通配符和正则表达式的一个简短列表:
* — 匹配所有字符
? — 匹配字串中的一个字符
\* — 匹配“*”字符
\? — 匹配“?”字符
\) — 匹配“)”字符
(出处:http://www.sheup.com)