Linux高级运维命令(sed)

24 篇文章 1 订阅

Sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作。

sed命令行格式为:

sed [-nefri] ‘command’ 输入文本     

从第两千行开始逐屏显示

sed -n '2000,$p' fname | less

筛选日志

sed -n '/^2016-06-09/p' catalina.out > 2016-06-09.log
sed -n '/^2016-06-09 13/p' catalina.out > 2016-06-09_13-14.log

常用选项

  • -n:使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
  • -e:直接在指令列模式上进行 sed 的动作编辑;
  • -f:直接将 sed 的动作写在一个档案内,-f filename 则可以执行 filename 内的sed 动作;
  • -r:sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
  • -i:直接修改读取的档案内容,而不是由萤幕输出

常用命令

  • a:新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c:取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d:删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
  • i:插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p:列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
  • s:替换,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

删除指定行

删除第一行

`sed '1d' fname`

删除最后一行

`sed '$d' fname`

删除第一行到第二行

`sed '1,2d' fname`

删除第二行到最后一行

`sed '2,$d' fname`

显示指定行

显示第一行

sed -n '1p' fname

显示最后一行

sed -n '$p' fname

显示第一行到第二行

sed -n '1,2p' fname

显示第二行到最后一行

sed -n '2,$p' fname

匹配查询(搜索)

查询包括关键字ruby所在所有行

sed -n '/ruby/p' fname

查询包括关键字$所在所有行,使用反斜线\屏蔽特殊含义

sed -n '/\$/p' fname

增加一行或多行字符串cat fname

Hello!
ruby is me,welcome to my blog.
end

第一行后增加字符串"drink tea"

sed '1a drink tea' fname
Hello!
drink tea
ruby is me,welcome to my blog.
end

第一行到第三行后增加字符串"drink tea"

sed '1,3a drink tea' fname
Hello!
drink tea
ruby is me,welcome to my blog.
drink tea
end
drink tea

第一行后增加多行,使用换行符\n

sed '1a drink tea\nor coffee' fname
Hello!
drink tea
or coffee
ruby is me,welcome to my blog.
end

替换行

第一行代替为Hised '1c Hi' fname

Hi
ruby is me,welcome to my blog.
end

第一行到第二行代替为Hi

sed '1,2c Hi' fname
Hi
end

批定行替换

要替换的字符串可以用正则表达式

sed 's/源字符串/目标字符串/g'

替换ruby为bird

sed -n '/ruby/p' fname | sed 's/ruby/bird/g'

删除ruby

sed -n '/ruby/p' fname | sed 's/ruby//g'

插入

`sed -i '$a bye' fname`在文件fname中最后一行直接输入"bye"

cat fname

Hello!
ruby is me,welcome to my blog.
end
bye

删除行

sed -i '/匹配字符串/d'  filename

替换匹配行中的某个字符串

`sed -i '/匹配字符串/s/替换源字符串/替换目标字符串/g' filename`

其他20个示例

  1. 将文件中的所有foo替换为bar

    sed 's/foo/bar/g' filename.txt
    
  2. 将文件中的第一行替换为new line

    sed '1s/.*/new line/' filename.txt
    
  3. 将文件中的最后一行替换为new line

    sed '$s/.*/new line/' filename.txt
    
  4. 将文件中的第5行替换为new line

    sed '5s/.*/new line/' filename.txt
    
  5. 将文件中的所有空行删除:

    sed '/^$/d' filename.txt
    
  6. 将文件中的所有行号添加到每行的开头:

    sed = filename.txt | sed 'N;s/\n/ /'
    
  7. 将文件中的所有行反转:

    sed '1!G;h;$!d' filename.txt
    
  8. 将文件中的所有大写字母转换为小写字母:

    sed 's/[A-Z]/\L&/g' filename.txt
    
  9. 将文件中的所有小写字母转换为大写字母:

    sed 's/[a-z]/\U&/g' filename.txt
    
  10. 在文件中添加一行new line

    sed '$a\new line' filename.txt
    
  11. 在文件中插入一行new line

    sed '1i\new line' filename.txt
    
  12. 在文件中删除第5行:

    sed '5d' filename.txt
    
  13. 在文件中删除最后一行:

    sed '$d' filename.txt
    
  14. 在文件中删除第一行:

    sed '1d' filename.txt
    
  15. 在文件中删除包含foo的行:

    sed '/foo/d' filename.txt
    
  16. 在文件中删除不包含foo的行:

    sed '/foo/!d' filename.txt
    
  17. 在文件中将每行的第一个单词替换为new word

    sed 's/^\w\+ /new word /' filename.txt
    
  18. 在文件中将每行的第二个单词替换为new word

    sed 's/\(\w\+\) \(\w\+\)/\1 new word/' filename.txt
    
  19. 在文件中将每行的最后一个单词替换为new word

    sed 's/\(\w\+\) $/new word/' filename.txt
    
  20. 在文件中将每行的第一个字符替换为>

    sed 's/^/>/' filename.txt
    
  • 10
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值