Read Sed Tr

上篇

案例三:用“read”,接受输入作为命令的变量。

1 一看到这么多没见过的命令,先别慌!其实很简单。 和上一个案例中一样,read用于读取使用者的输入,然后作为上图倒数两行命令的参数使用。 (解释:qcow2是一个虚拟机文件,这个命令的作用是压缩虚拟机的大小,方便在网络上传输) 这脚本会要求使用者提供需要压缩的虚拟机文件的名字(虚拟机通常很大),和压缩好的你起的名。 然后它就会去执行了! 很方便,再也不用输入很长很长的命令了。

案例四:sed

steam editor 可以分析标准输入数据,处理后再标准输出。

1
2
3
4
5
6
7
8
9
10
11
12
参数:
‐n 只有经过处理的那一行才会被列出来。
‐e ?
‐f 写入到某个档案里
‐r 使用延伸型正则表达式。
操作:
a‐‐add
c‐‐replace
s‐‐replace
d‐‐delete
i‐‐insert
p‐‐print

案例一(删除)

nl /etc/passwd | sed '2,5d' 把passwd文件的2‐5行删除 但是它只会更改后输出,不会更改原文件。

案例二(替换)

sed 's/hello/world' input.txt > output.txt 把hello替换为world,输出到output.txt文件 sed ‐i 's/hello/world' input.txt 把hello替换为world,修改原文件。 如果input.txt有三个hello,上面的命令只会替换第一个。 sed ‐i 's/hello/world/g' input.txt 替换每一处匹配 sed ‐i 's/hello/world/2g' input.txt 从第二处匹配开始,替换后面所有匹配(忽略第一 处)

案例三(删除)

sed '/^$/d' file 删除空白行

案例四(替换)

echo this is an example | sed 's/\w\+/[&]/g' \w+匹配每个单词,用[&]替换它 结果:[this] [is] [an] [example]

案例五

有一些虚拟机,它们有各自的xml文档。但是虚拟机开机后,发现鼠标和物理机的不同步。 于是修改xml文档,用bash脚本批量修改。 2

案例六(插入)

批量给文件首行插入以下的数据。

1
2
3
4
5
6
7
8
9
---
categories:

- code

tags: 

    - code
---

sed -i '1i---\ncategories:\n- code\ntages:\n- code\n---' 2017-02-01-BC*

案例七(删除所有空格)

4

案例八(删除所有换行符)

sed ":a;N;s/\n//g;ta" a.txt

案例五:用tr进行文本的替换

3 该脚本,将中文的左尖角替换为英文的,替换后,发现变成了三个英文左尖角。 可能是字节长度不同的原因。 于是再用‐s 参数压缩一下,把三个压缩为一个。