linux全局搜索文件_linux 之 sed (一)

a684e17861d498bceb72292d0ec045cd.png4fd1ab76540f57fc4fcea5d3e7ebb3b8.pnglinux 之 sed (一)—— 字符串替换入门

处理数据如果只会R语言就很吃亏了,毕竟很多时候一行命令就能解决的事情,如果用R处理,可能要写一大段,说不定运行速度还慢呢。

稍微对linux有点了解的人,可能都听过sedgrepawk 这三剑客。今天我们就来谈谈sed 的一些常用命令。

1、基本语法
sed 's/source_str/replace_str/' input_file
  • s表示替换,
  • /: 定界符,它可以是任何字符。sed 's:source_str:replace_str:'
  • source_str: 要搜索的普通字符串或正则表达式。
  • replace_str: 替换字符串
  • input_file: 要在其上运行命令的文件

如果需要替换的字符串中含有单引号'‘,外层引号可以换成双引号""

2、非全局替换

我们先创建一个1.txt的文件

$cat 1.txt
temp    data    day
bigdata day     mydata  
tdata   my      one

假设我们想将文件中的data字符串替换成abc

$sed 's/data/abc/' 1.txt > 2.txt

我们一起看下结果

$cat 2.txt
temp    abc     day
bigabc  day     mydata  
tabc    my      one

显而易见,data字符已经被abc替换了,但是细心的朋友肯定也发现了第三列的mydata并没有被替换。

3、全局替换

如果要完成全局替换,那么后面要加上g

$sed 's/data/abc/g' 1.txt > 2.txt
$cat 2.txt
temp    abc     day
bigabc  day     myabc   
tabc    my      one
4、原文件替换

当然,如果你想要直接简单粗暴的在原始文件中直接进行替换,可以加上-i参数

$sed -i 's/data/abc/g' 1.txt
$cat 1.txt
temp    abc     day
bigabc  day     myabc   
tabc    my      one
5、指定位置替换

如果你想要在某一个指定的行或者指定的段落之间进行字符串的替换的话,sed命令也是可以帮到你的。

一些特殊字符的使用

  • ^: 表示行首

  • $: 符号如果在引号中表示行尾,但是在引号外却表示末行(最后一行)

  • &: 表示匹配到的字符串

假设现在只在以temp为开头的行中,将abc替换成data

$sed '/^temp/s/abc/data/g' 1.txt > 2.txt
$cat 2.txt
temp    data    day
bigabc  day     myabc   
tabc    my      one

命令中的^符号是以什么字符开头的意思

那么要在以temp开头和bigabc开头的段落之间完成替换的命令就是

$sed '/^temp/,/^big/s/abc/data/g' 1.txt > 2.txt
$cat 2.txt
temp    data    day
bigdata day     mydata  
tabc    my      one

所以以上第三行就没有进行替换。

6、指定行替换
sed 's/^/aaa&/g'             # 在所有行首添加aaa
sed 's/$/&aaa/g'             # 在所有行末添加aaa
sed '2s/source/replace/g'    # 在第2行替换
sed '$s/source/replace/g'    # 在最后一行替换
sed '2,5s/source/replace/g'  # 在2到5行之间替换
sed '2,$s/source/replace/g'  # 在2到最后一行之间替换
其他
  • 同时执行多个替换规则
sed 's/^/aaa&/g;s/$/&aaa/g'  # 同时在所有行首、行尾添加aaa

好啦,今天替换就讲到这里啦,累了哈哈哈哈哈。

a684e17861d498bceb72292d0ec045cd.png

留言

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值