一、I/O 重定向与管道
重定向
一般情况下命令从标准输入(stdin)读取输入,并输出到标准输出(stdout),默认情况下两者都是你的终端。使用重定向可以让命令从文件读取输入/输出到文件。
$ echo "Hello Linux!" > output_file # 将输出写入到文件(覆盖原有内容)
$ cat output_file
Hello Linux!
$ echo "rewrite it" > output_file
$ cat output_file # 可以看到原来的 Hello Linux! 被覆盖了。
rewrite it
$ echo "append it" >> output_file # 将输出追加到文件(不会覆盖原有内容)
$ cat output_file
rewrite it
append it
管道
管道(pipe),操作符 |,作用为将符号左边的命令的 stdout 接到之后的命令的 stdin。管道不会处理 stderr。
筛选 ls 输出中所有包含msg的字符串的行

二、网络下载
通过以下内容讲述的 wget (wget) 和 cURL (curl) 工具,我们可以 Linux 上进行轻量的下载活动。
Wget
wget是强力方便的下载工具,可以通过 HTTP 和 FTP 协议从因特网中检索并获取文件,支持递归遍历。
用法:
wget [option]... [URL]...
常用选项:
cURL
cURL (curl) 是一个利用 URL 语法在命令行下工作的文件传输工具,其中 c 意为 client。由于可自定义各种请求参数,所以在模拟 web 请求方面更擅长;
用法同wget
常用选项
| |
|---|
| |
| 把远程下载的数据保存到文件中,直接使用 URL 中默认的文件名 |
| |
| |
| |
三、文本处理
文本统计:wc
wc(word count)是文本统计的常用工具,它可以输出文本的行数、单词数与字符(字节)数。

例子所示,有5行、9个单词
文本比较:diff
diff 工具用于比较两个文件的不同,并列出差异。
$ echo hello > file1
$ echo hallo > file2
$ diff file1 file1
$ diff file1 file2
1c1
< hello
---
> hallo
参数 -w 可忽略所有空白字符, -b 可忽略空白字符的数量变化。假如比较的是两个文本文件,差异之处会被列出;假如比较的是二进制文件,只会指出是否有差异。
文本开头与结尾:head & tail
顾名思义,head 和 tail 分别用来显示开头和结尾指定数量的文字。
以 head 为例,这里给出共同的用法:
不加参数的时候默认显示前 10 行
- • -c 指定字节数
除此以外,tail 还有一个非常实用的参数 -f:当文件末尾内容增长时,持续输出末尾增加的内容。
文本查找:grep
grep 命令可以查找文本中的字符串
文本替换:sed
sed 命令可以替换文本中的字符串:
$ sed 's/hello/world/g' file # 将文件 file 中的 hello 全局(global)替换为 world 后输出
$ sed 's/hello/world/' file # 将文件 file 的每一行第一个出现的 hello 替换为 world 后输出
$ echo 'helloworld' | sed 's/hello/world/g' # 管道也是可以的
$ sed -i 's/hello/world/g' file # -i 参数会直接写入文件,操作前记得备份哦!
$ sed -i.bak 's/hello/world/g' file # 当然,也可以让 sed 帮你备份到 file.bak
对于大多数用户来说,最常用 sed 的场合是替换软件源的时候。
参考资料:
Linux 101