Shell脚本实现对文件编辑
常见Linux文件的编辑命令 vi/vim,有时候我们想写一个脚本实现对文件编辑,这个时候,可能就不够用了,下面介绍一些办法
1、echo命令
Shell的echo命令常用于字符串的输出
例如:
[root@mdw zxy]# echo 'Hello World !' > file1
[root@mdw zxy]# cat file1
Hello World !
[root@mdw zxy]# echo 'Good Luck' > file1
[root@mdw zxy]# cat file1
Good Luck
[root@mdw zxy]#
>>追加
[root@mdw zxy]# echo 'Hello World !' >> file1
[root@mdw zxy]# cat file1
Good Luck
Hello World !
2、sed命令
sed命令是一个面向字符流的非交互式编辑器,sed是按行来处理文本内容的。在shell中,使用sed来批量修改文本内容是非常方便的。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
2.1 使用sed把aaa添加到文件file1中
[root@mdw zxy]# sed -i '$a aaaa' file1
[root@mdw zxy]# cat file1
Good Luck
Hello World !
aaaa
其中$代表最后一行,a是新增
{
#如果知道行号可以用下面的方法
sed
-i
'88 r b.file'
a.
file
#在a.txt的第88行插入文件b.txt
awk
'1;NR==88{system("cat b.file")}'
a.
file
> a.
file
#如果不知道行号,可以用正則匹配
sed
-i
'/regex/ r b.txt'
a.txt
# regex是正则表达式
awk
'/target/{system("cat b.file")}'
a.
file
> c.
file
#sed的話如果不改变源文件,可以去掉-i开关,修改会输出到STDOUT
}
2.2 使用sed命令对文件中的字符替换
例如:
[root@mdw zxy]# sed -i 's|aaaa|bbbb|' file1
[root@mdw zxy]# cat file1
Good Luck
Hello World !
bbbb
2.3特殊字符的替换
[root@mdw zxy]# echo 'Hello,world!!!' >>file1
[root@mdw zxy]# sed -i 's|,|*|' file1
[root@mdw zxy]# cat file1
Good Luck
Hello World !
bbbb
Hello*world!!!
[root@mdw zxy]#