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


原文件:
[root@xiaowu shell]# cat -n file 
     1  aaaa
     2  bbbb
     3  cccc
     4  dddd

现在要在第二行即“bbbb”行的下面添加一行,内容为“xiaowu”
[root@xiaowu shell]#  sed '/bbbb/ a\xiaowu' file 
aaaa
bbbb
xiaowu
cccc
dddd

如果要加两行“xiaowu”可以用一下语句,注意用“ \n”换行
[root@xiaowu shell]# sed '/bbbb/ a\xiaowu \nxiaowu' file 
aaaa
bbbb
xiaowu
xiaowu
cccc
dddd

如果要在第二行即“bbbb”行的上添加一行,内容为“xiaowu”,可以把参数“a”换成“i”
[root@xiaowu shell]# sed '/b/ i\xiaowu' file 
aaaa
xiaowu
bbbb
cccc
dddd

以上文件中只有一行匹配,如果文件中有两行或者多行匹配,结果有是如何呢?

[root@xiaowu shell]# cat -n file 
     1  aaaa
     2  bbbb
     3  cccc
     4  bbbb
     5  dddd

[root@xiaowu shell]# sed '/bbbb/a\xiaowu' file 
aaaa
bbbb
xiaowu
cccc
bbbb
xiaowu
dddd

由结果可知,每个匹配行的下一行都会被添加“xiaowu”

那么如果指向在第二个“bbbb”的下一行添加内容“xiaowu”,该如何操作呢?
可以考虑先获取第二个“bbbb”行的行号,然后根据行号在此行的下一行添加“xiaowu”

获取第二个“bbbb”行的行号的方法:
方法一:
[root@xiaowu shell]# cat -n file |grep b |awk '{print $1}'|sed -n "2"p
4
方法二:
[root@xiaowu shell]# sed -n '/bbbb/=' file |sed -n "2"p
4
由结果可知第二个“bbbb”行的行号为4,然后再在第四行的前或后添加相应的内容:
[root@xiaowu shell]# sed -e '4a\xiaowu' file 
aaaa
bbbb
cccc
bbbb
xiaowu
dddd
[root@xiaowu shell]# sed -e '4a\xiaowu\nxiaowu' file 
aaaa
bbbb
cccc
bbbb
xiaowu
xiaowu
dddd


向指定行的末尾添加指定内容,比如在“ccccc”行的行尾介绍“ eeeee”

[root@xiaowu shell]# cat file
aaaaa
bbbbb
ccccc
ddddd
[root@xiaowu shell]# sed 's/cc.*/& eeeee/g' file
aaaaa
bbbbb
ccccc eeeee
ddddd

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]# 

  • 14
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值