linux汇总整理-sed篇

sed简介

  • Sed 全名叫Stream editor,流编辑器,用程序的方式来编辑文本。sed基本上就是玩正则表达式,玩sed的人,正则表达式一般都比较强。

正则表达式

  • ^ 表示一行的开头。
  • $ 表示一行的结尾。
  • < 表示词首。 如<abc 表示以 abc 为首的詞。
  • > 表示词尾。 如 abc> 表示以 abc 結尾的詞。
  • . 表示任何单个字符。
  • * 表示某个字符出现了0次或多次。
  • [ ] 字符集合。 如:[abc]表示匹配a或b或c,还有[a-zA-Z]表示匹配所有的26个字符。如果其中有表示反,如[a]表示非a的字符

各种参数

  • -i :直接修改文件内容
# 直接修改文件,将所有的nihao替换成wohao
sed -i 's/nihao/wohao/g' file.txt  
  • -e :多个匹配
# 将nihao和tahao都替换成wohao(注意:没有-i参数,不会直接修改文件内容)
sed -e 's/nihao/wohao/g' -e '/tahao/wohao/g' file.txt  
  • -n :跟p命令组合,只打印匹配的行
# 筛选出包含nihao的行,并打印出来(实际执行结果是所有行都打印,只不过包含nihao的行打印了两遍)
sed '/nihao/p' file.txt    
# 只打印包含nihao的行,其余行不打印 
sed -n '/nihao/p' file.txt  

用s命令替换

  • 替换开头结尾
# 在文件每一行的开头添加一个“#”
sed 's/^/#/g' file.txt
# 在文件每一行的结尾添加一个“---”
sed 's/$/---/g' file.txt
  • 只替换特定行
# 将文件第3行里的my替换成your
sed '3s/my/your/g' file.txt
# 将文件第3~6行的my替换成your
sed '3,6s/my/your/g' file.txt
# 将文件第6行及其之后的my替换成your
sed '6,$s/my/your/g' file.txt
  • 只替换每行固定位置
# 将每一行中所有的小写“s”替换成大写“S”
sed 's/s/S/g' file.txt
# 将每一行中第一个小写“s”替换成大写“S”
sed 's/s/S/1' file.txt
# 同上,将每一行中第一个小写“s”替换成大写“S”
sed 's/s/S/' file.txt
# 将每一行中第二个小写“s”替换成大写“S”
sed 's/s/S/2' file.txt
# 将每一行中第3个及其之后的小写“s”替换成大写“S”
sed 's/s/S/3g' file.txt
  • 将匹配的整行删除
# 文件中含有“nihao”的行全部删除
sed '/nihao/d' file.txt
  • 使用&当作被匹配的变量,提高可读性和可理解性
# 在每一行的nihao两边套上中括号,变成[nihao]
sed 's/nihao/[&]/g' file.txt

多个匹配

将文件第1~3行的my替换成your,并将第3行及其之后的This替换成That
sed -e '1,3s/my/your/g' -e '3,$s/This/That/g' file.txt
执行效果同上
sed '1,3s/my/your/g; 3,$s/This/That/g' file.txt

圆括号匹配

  • 使用圆括号匹配的示例:(圆括号括起来的正则表达式所匹配的字符串会可以当成变量来使用,sed中使用的是\1,\2…)
$ sed 's/This is my \([^,]*\),.*is \(.*\)/\1:\2/g' my.txt
cat:betty
dog:frank
fish:george
goat:adam
  • 上面这个例子中的正则表达式有点复杂,解开如下(去掉转义字符):
    正则为:This is my ([^,]*),.*is (.*)
    匹配为:This is my (cat),……….is (betty)
    然后:\1就是cat,\2就是betty

用N命令合并行

  • N命令的作用是将文件中的两行当成一行来处理,其分隔符是“\n”。举例如下:
    sed 'N;s/\n/,/' file.txt
# 源文件内容file.txt
This is my cat
  my cat's name is betty
This is my dog
  my dog's name is frank
This is my fish
  my fish's name is george
This is my goat
  my goat's name is adam
# 用N命令转换后,缓存中的文件内容变成了
This is my cat\n  my cat's name is betty
This is my dog\n  my dog's name is frank
This is my fish\n  my fish's name is george
This is my goat\n  my goat's name is adam
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值