- LawsonAbs的认知与思考,不一定完善和准确,还请各位读者怀批判思维阅读。
- 持续更新
1.参数详解
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
这意思就是说:就地修改文件
下面说一个常用的命令:
2.命令详解s/regexp/replacement/
Attempt to match regexp against the pattern space. If successful, replace that portion matched with replacement. The replacement may contain the special character & to refer to that portion of the pattern space which matched, and the special escapes \1 through \9 to refer to the corresponding matching sub-expressions in the regexp.
- 1.只是输出显示变化了,但是没有真正的修改文件【有两种命令】
[root@littlelawson ~]# sed 's/little/xiaomi/' test.txt
1 xiaomi
2 google
3 baidu
4 alibaba
再看一下原文件中的内容,并没有任何改变:
[root@littlelawson ~]# cat test.txt
1 little
2 google
3 baidu
4 alibaba
[root@littlelawson ~]# sed -n 's/little/xiaomi/p' test.txt
1 xiaomi
[root@littlelawson ~]# cat test.txt
1 little
2 google
3 baidu
4 alibaba
- 2.选择符合条件的文本,进行真实的修改。有两种方法
[root@littlelawson ~]# sed -i 's/little/xiaomi/g' test.txt
[root@littlelawson ~]# cat test.txt
1 xiaomi
2 google
3 baidu
4 alibaba
- 注意
-i
且 最后一个/
后没有p
或者g
符号
[root@littlelawson ~]# sed -i 's/xiaomi/little/' test.txt
[root@littlelawson ~]# cat test.txt
1 little
2 google
3 baidu
4 alibaba
-
-i
参数 且最后有p
参数
[root@server4 shells]# cat file2.txt
1 xiaomi
2 great
2 great
3 baidu
4 alibaba
[root@server4 shells]#
[root@server4 shells]# sed -i 's/xiaomi/litter/p' file2.txt
[root@server4 shells]# cat file2.txt
1 litter
1 litter
2 great
2 great
3 baidu
4 alibaba
发现这个p
参数 的作用是:对于替换的数据,再生成一条
-
-i
参数且有g
参数
[root@server4 shells]# cat file2.txt
1 litter
1 litter
2 great
2 great
3 baidu
4 alibaba
[root@server4 shells]#
[root@server4 shells]#
[root@server4 shells]#
[root@server4 shells]# sed -i 's/litter/xiaomi/g' file2.txt
[root@server4 shells]# cat file2.txt
1 xiaomi
1 xiaomi
2 great
2 great
3 baidu
4 alibaba
发现p
以及 g
参数功能相同。
2. 参数详解
-
-n
参数
控制自动打印
-n, --quiet, --silent
suppress automatic printing of pattern space
[root@server4 shells]# cat file2.txt
1 xiaomi
2 great
3 baidu
4 alibaba
[root@server4 shells]#
不使用-n
参数
[root@server4 shells]# sed 's/great/google/p' file2.txt
1 xiaomi
2 google
2 google
3 baidu
4 alibaba
使用-n
参数
[root@server4 shells]# sed -n 's/great/google/p' file2.txt
2 google
-
-i
参数
如果使用-i
参数,则表示就地编辑文件(即修改文件),如果提供了后缀,则会有一个备份
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
接下来展示一下替换+备份的功能(配合/g参数
):
[root@server4 temp]# cat file2.txt
1 xiaomi
2 great
3 baidu
4 alibaba
[root@server4 temp]# sed -i.bak 's/great/google/g' file2.txt
[root@server4 temp]# ll
total 8
-rw-------. 1 root root 36 Nov 22 19:05 file2.txt
-rw-------. 1 root root 35 Nov 22 18:58 file2.txt.bak
[root@server4 temp]# cat file2.txt.bak
1 xiaomi
2 great
3 baidu
4 alibaba
[root@server4 temp]# cat file2.txt
1 xiaomi
2 google
3 baidu
4 alibaba
[root@littlelawson ~]# cat test.sh
#!/bin/bash
newname=`pwd`
echo $newname >> HelloLinux.txt
echo kafka
echo hadoop
echo spark
echo HelloLinux
- 4.查看第二行的内容
[root@littlelawson ~]# sed -n 2p test.sh
newname=`pwd`
- 5.查看第2行到第10行【如果大于文件总行数,则显示到文件的最后一行】
[root@littlelawson ~]# sed -n 2,10p test.sh
newname=`pwd`
echo $newname >> HelloLinux.txt
echo kafka
echo hadoop
echo spark
echo HelloLinux
3. 可用场景
3.1 删除某个文件的第一行
删除文件xxx.csv的第一行 : sed -i '1d' xxx.csv
- 示例如下
[root@server4 shells]# cat file1.txt
spark
hadoop
hbase
zookeeper
[root@server4 shells]# sed -i '1d' file1.txt
[root@server4 shells]# cat file1.txt
hadoop
hbase
zookeeper
- 删除第二行
[root@server4 shells]# cat file1.txt
hadoop
hbase
zookeeper
[root@server4 shells]# sed -i '2d' file1.txt
[root@server4 shells]# cat file1.txt
hadoop
zookeeper
3.2 替换某个文件夹下所有包含指定字符的文件
例如:我想替换掉当前目录下的包含unix
的所有文件成 linux
。那么可以这么写命令。
- 查看 当前文件夹下的文件内容:
[root@server4 temp]# cat data1.txt
1 mac 2000
2 winxp 4000
3 bsd 1000
4 unix 1000
[root@server4 temp]# cat file1.txt
unix
hadoop
zookeeper
- 执行如下命令:
[root@server4 temp]# sed -i 's/unix/linux/g' `grep unix -rl .`
- 再次查看文件内容
[root@server4 temp]# cat data1.txt
1 mac 2000
2 winxp 4000
3 bsd 1000
4 linux 1000
[root@server4 temp]# cat file1.txt
linux
hadoop
zookeeper