sed总结[群]

sed: Stream Editor
    行编辑器 逐行编辑
    
将每行内容读入到内存中,在内存中进行处理,将结果返回给屏幕 ,此段内存空间称为模式空间
默认不编辑原文件,仅对模式空间的数据进行处理,处理结束后,将模式空间的内容显示到屏幕

sed命令的使用格式

sed [options] 'AddressCommand' file ...

    Address:表示对哪些行进行处理
    Command:操作命令
    options:
        -n:不再显示模式空间中的内容(默认显示)
        -i: 直接修改原文件
        -e 'AddressCommand' -e 'AddressCommand':同时执行多个匹配操作
        -f file_name    将多个AddressCommand保存至文件中,每行一个AddressCommand;读取该文件中的操作同时执行多个操作
        -r:表示使用扩展正则表达式
    
Address表示方法:
1、StartLine,EndLine
    1,100
    $表示最后一行
    1,$

2、/Regex/
    /oot/
    /^oot/
    
3、/Regex1/,/Regex2/
    第1次被Regex1匹配的行开始,到第1次被Regex2匹配的行中间的所有行
    
4、LineNumber
    10
    精确匹配特定的行
    
5、StartLine,+N
    1,+3
    从startline开始,向后的N行
    
Command:
d  删除符合条件的行
  # sed '1,2d' /etc/inittab
    
  删除文件中包含oot的行
  # sed '/oot/d' /etc/fstab
    
  删除第1行及其后2行
  # sed '1,+2d' /etc/fstab
    
  删除第1行
  # sed '1d' /etc/fstab
 
  删除以/开头的行
  # sed '/^\//d' /etc/fstab
    
p  显示符合条件的行
  显示以/开头的行
  # sed -n '/^\//p' /etc/fstab
 
a \string    在符合条件的行后追加新行,string为追加的内容
  在以/开头的行后面追加# hello world
  # sed '/^\//a \# hello world' /etc/fstab
 
  在以/开头的行后面追加两行内容,分别为# hello worl  # hello linux
  # sed '/^\//a \# hello world\n# hello linux' /etc/fstab
    
i \string    在符合条件的行前添加新行,string为追加的内容
   在文件第1行添加# hello world
   # sed '1i \# hello world' /etc/fstab
   
r file_name        将指定文件的内容添加到符合条件的行的后面
   在文件的第2行后追加/etc/issue文件的内容
   # sed '2r /etc/issue' /etc/fstab
   
w file_name        将符合条件的内容另存到指定文件中
   将以UUID开头的行另存为到/1.txt中
   # sed '/^UUID/w /1.txt' /etc/fstab
   

s/regex/string/[修饰符]        查找并替换(默认情况下只替换每一行第1次被匹配的字符)
   修饰符:
    g:替换每一行所有的字符
    i:忽略大小写

   查找文件中的UUID,并替换为uuid
   # sed 's/UUID/uuid/' /etc/fstab
   
   将行首的/替换成#
   # sed 's/^\//#/' /etc/fstab
   
   将每一行出现的所有/替换为@
   # sed 's/\//@/g' /etc/fstab
   
   反向引用 \(\)   \1  \2
   将文件中以l..e替换为l..er,例如love替换为lover
   # sed 's/\(l..e\)/\1r/g' /etc/fstab
   或
   # sed 's/l..e/&r/g' /etc/fstab
   &:引用正则表达式匹配的所有字符串
   
   将文件中l..e的单词替换为L..e,例如love替换为Love
   # sed 's/l\(..e\)/L\1/' /1.txt
 
   删除行首的空格
   # sed 's/^[[:space:]]*//' /etc/fstab
   
=    用于显示每一行的行号
    显示/etc/passwd文件最后一行的行号
    # sed -n '$=' /etc/passwd
    49
 
c \string     替换指定行的内容
   将文件中最后一行内容替换为End Of File
   # sed '$c \End Of File' /1.txt
   
   
 
sed示例:
1、删除/etc/grub.conf文件中行首的空白字符
# sed 's/[[:space:]]*//' /etc/grub.conf

2、替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5
# sed 's/\(id:\)3\(:initdefault:\)/\15\2/' /etc/inittab

3、删除/etc/inittab文件中的空白行
# sed '/^$/d' /etc/inittab

4、删除/etc/inittab文件中开头的#号
# sed 's/^#//' /etc/inittab

5、删除某文件中开头的#号,但要求#号后面必须有空白字符
# sed 's/^#[[:space:]]\+//' /1.txt

6、删除某文件中以空白字符后面跟#号的行中的开头的空白字符及#
# sed 's/^[[:space:]]\+#//' /1.txt


分割线
感谢打赏
江西数库信息技术有限公司
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS