一、I/O 重定向与管道

重定向

一般情况下命令从标准输入(stdin)读取输入,并输出到标准输出(stdout),默认情况下两者都是你的终端。使用重定向可以让命令从文件读取输入/输出到文件。

1
2
3
4
5
6
7
8
9
10
11
12

$ 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

HTTP 和 FTP 协议从因特网中检索并获取文件,支持递归遍历。
1
2
3
4
5
6
7

用法:

```bash

wget [option]... [URL]...

常用选项:

选项 含义
-i, –input-file=文件 下载本地或外部文件中的 URL
-O, –output-document=文件 将输出写入文件
-b, –background 在后台运行 wget
-d, –debug 调试模式,打印出 wget 运行时的调试信息

cURL

cURL (curl) 是一个利用 URL 语法在命令行下工作的文件传输工具,其中 c 意为 client。由于可自定义各种请求参数,所以在模拟 web 请求方面更擅长;

用法同wget

常用选项

选项 含义
-o 把远程下载的数据保存到文件中,需要指定文件名
-O 把远程下载的数据保存到文件中,直接使用 URL 中默认的文件名
-I 只展示响应头内容
-s, –silent 启用静默模式,抑制不必要的输出
-S, –show-error 甚至在静默模式下显示报错

三、文本处理

文本统计:wc

wc(word count)是文本统计的常用工具,它可以输出文本的行数、单词数与字符(字节)数。

例子所示,有5行、9个单词

文本比较:diff

diff 工具用于比较两个文件的不同,并列出差异。

1
2
3
4
5
6
7
8
9
$ echo hello > file1
$ echo hallo > file2
$ diff file1 file1
$ diff file1 file2
1c1
< hello
---
> hallo

参数 -w 可忽略所有空白字符, -b 可忽略空白字符的数量变化。假如比较的是两个文本文件,差异之处会被列出;假如比较的是二进制文件,只会指出是否有差异。

文本开头与结尾:head & tail

顾名思义,head 和 tail 分别用来显示开头和结尾指定数量的文字。

以 head 为例,这里给出共同的用法:

不加参数的时候默认显示前 10 行

  • -n 指定行数,可简化为 -
  • -c 指定字节数
    除此以外,tail 还有一个非常实用的参数 -f:当文件末尾内容增长时,持续输出末尾增加的内容。

文本查找:grep

grep 命令可以查找文本中的字符串

文本替换:sed

sed 命令可以替换文本中的字符串:

1
2
3
4
5
$ 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