Linux文本工具sed

Sed

sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

sed用法:

sed [OPTION]...  ‘script‘  [input-file] ...

常用选项

-n:静默模式(禁止在匹配不到的情况下,直接屏幕输出,仅显示script处理后的结果)
    -e script:多点编辑(可同时运行多个脚本)
    -f script-file:读取脚本文件并运行(文件内每行都有匹配条件)
    -r:支持扩展正则表达式
    -i:直接编辑源文件

script:

地址定界编辑命令

地址定界

1.空地址:对全文进行处理

2.单地址:

#:指定的行(#表示数字)

/pattern/:被此模式所匹配到的每一行(被正则表达式匹配)

3.地址范围:

#,#:第几行到第几行

#,+#:相对地址表示法(如3,+6表示从第3行开始往下加6行)

#,/pat1:从第#行,到被模式1匹配到之间的行

/pat1,/pat2:从第一个模式开始到第二个模式结束的行

$:最后一行

4.步进:

~

1~2:所有基数行(从第1行开始往下每隔1行)

2~2:所有偶数行(从第2行开始往下每隔1行)

编辑命令

d:删除

p:显示模式空间中的内容(如果不加-n,默认匹配到的行再显示一遍)

a  \text:在行后面追加文本“text”,支持使用\n实现多行追加

i  \text:在行前面插入文本“text”,支持使用\n实现多行插入

c  \text:把匹配到的行替换为此处指定的文本“text”

w /PATH/TO/SOMEFILE:保存模式空间匹配到的行至指定的文件中

r  /PATH/FROM/SOMEFILE:读取指定文件的内容至当前文件被模式匹配到的行后面;文件合并

=:为模式匹配到的行打印行号

!:条件取反

s///:查找替换,其分隔符可自行指定,常用的有[email protected]@@, s###等(s/查找内容/替换内容/替换标记)

替换标记:

g:全局替换;

i:忽略大小写

w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;

p:显示替换成功的行;

Sed命令的使用:

  1. 删除/tmp/grub.cfg文件中所有行的行首的空白字符(删除其实就是让其替换为空)
首先看下/tmp/grub.cfg文件

[[email protected] ~]# cat /tmp/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set pager=1

if [ -s $prefix/grubenv ]; then
  load_env
fi
if [ "${next_entry}" ] ; then
   set default="${next_entry}"
   set next_entry=
   save_env next_entry
   set boot_once=true
else
   set default="${saved_entry}"
使用sed命令进行操作后

[[email protected] ~]# sed ‘s/^[[:space:]]\+//‘ /tmp/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set pager=1

if [ -s $prefix/grubenv ]; then
load_env
fi
if [ "${next_entry}" ] ; then
set default="${next_entry}"
set next_entry=
save_env next_entry
set boot_once=true
else
set default="${saved_entry}"

2.删除/tmp/grub.cfg文件中所有以#开头的行,行首是#及后面所有的空白字符

首先看下/etc/grub.conf文件

[[email protected] ~]# cat /tmp/grub.cfg
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub2-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#
使用sed命令进行操作后
[[email protected] ~]# sed ‘s/^#[[:space:]]//‘ /tmp/grub.cfg
#
DO NOT EDIT THIS FILE
#
It is automatically generated by grub2-mkconfig using templates
from /etc/grub.d and settings from /etc/default/grub
#

3.取/etc/fstab文件中偶数行,另存为/tmp/newfstab

首先看下/etc/fstab文件
[[email protected] ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Fri May 13 14:28:49 2016
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=b66544bf-32a4-4bef-82cb-0059f9e94b34 /                       xfs     defaults        0 0
UUID=321571a3-d498-4677-be37-fc18793f3ca1 /boot                   xfs     defaults        0 0
UUID=54e25c6d-d378-4c2f-9df4-62d25f6065f8 /usr                    xfs     defaults        0 0
UUID=9b2e4d08-b266-47fc-b8d1-3f81b76094fe swap                    swap    defaults        0 0
使用sed命令进行操作后
[[email protected] ~]# sed ‘2~2w /tmp/newfstab‘ /etc/fstab

再来查看另存为的/tmp/newfstab
[[email protected] ~]# cat /tmp/newfstab 
#
# Created by anaconda on Fri May 13 14:28:49 2016
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
#
UUID=321571a3-d498-4677-be37-fc18793f3ca1 /boot                   xfs     defaults        0 0
UUID=9b2e4d08-b266-47fc-b8d1-3f81b76094fe swap                    swap    defaults        0 0

4.echo一个绝对路径给sed,取其基名

使用sed命令操作后(如果用s///,以/的所有路径需要\转译,避免麻烦,直接使用[email protected]@@)
[[email protected] vars]# echo /etc/yum/vars/ | sed ‘[email protected][^/]\+/\[email protected]@‘
/yum/vars/
时间: 2024-10-07 19:12:42

Linux文本工具sed的相关文章

Linux运维学习历程-第八天-Linux文本工具sed与Vim(vi)

概述: 本篇我们主要学习两个功能非常强大的文本编辑器,了解这两种文本编辑器的各自的特点 一.vi(vim)文本编辑器 练习和课后作业 1 .删除/etc/grub2.conf 文件中所有以空白开头的行行首的空白字符 sed "s/^[[:space:]]\+//" /etc/grub2.cfg sed -r "s/^[[:space:]]+//" /etc/grub2.cfg 2 .删除/etc/fstab 文件中所有以# 开头,后面至少跟一个空白字符的行的行首的#

linux文本处理sed、软件包管理、磁盘存储和文件系统

linux文本处理sed.软件包管理.磁盘存储和文件系统 1.取基名和文件名 [[email protected] scripts38]#echo /etc/sysconfig/network-scripts/ |sed -r '[email protected](^/.*/)([^/]+)/[email protected]\[email protected]' /etc/sysconfig/ [[email protected] scripts38]#echo /etc/sysconfig/

linux文本处理sed、软件包管理、磁盘存储、文件系统和挂载

Linux文本处理工具sed.软件包管理.磁盘存储及文件系统 文本处理工具sed巧妙用法 1.通过sed获取文件路径的基名和目录名 思路:采用正则表达式将文本字符串分组,取对应的分组后向引用即可. 获取基名 [[email protected] ~]#echo /etc/sysconfig/network-scripts/ |sed -r '[email protected](^/.*/)([^/]+)/[email protected]\[email protected]' network-s

使用 Linux 文本工具简化数据的提取

Linux 操作系统中有很多文件:配置文件.文本文件.文档文件.日志文件.用户文件,这个清单还在不断增长.通常,这些文件都包含了要查找重要数据所需要访问的一些信息.尽管我们可以简单地使用诸如 cat.more 之类的标准工具将大部分文件的内容输出到屏幕上,但是系统中有更加合适的工具可以对文本进行过滤和处理,这样就可以只关心我们想要的内容. 在阅读本文的过程中,您可以打开 shell 并体验一下每个工具的例子. 正则表达式 在开始之前,我们需要首先理解什么是正则表达式,以及如何使用正则表达式. 在

处理文本的工具sed,vim 编辑器的使用   Linux版

处理文本的工具sed Stream EDitor 行编辑器 sed一次处理一行的内容,处理时,将当前处理的行存储在临时缓冲区,称为"模式空间",接着用sed命令处理缓冲区中的内容,处理完成后,将缓冲区的内容送往屏幕,接着处理下一行不断重复,直到末尾. 一次处理一行 文件--->内存空间--->屏幕 模式空间 文件--->内存空间--->屏幕 | 保持空间 sed   -n:不输出模式空间内容的自动打印 -e:多点编辑 -f:/PATH/TO/SCRIPT_FIL

Linux 的文本处理工具---sed

                sed 处理文本工具 一.概述 Stream EDitor,行编辑器 sed是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重定向存储输出.sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等  sed 是一种非

linux下的文本处理工具---sed

文本处理工具sed 1.sed介绍 Sed是一种非交互式的流编辑器,通过多种转换修改流经过它的文本.但是,默认情况下,sed并不改变原文件本身,而只是对流经sed命令的文本进行修改,并将修改后的结果打印到屏幕上.Sed处理文本时是以行为单位的,每处理一行就立即打印出来,然后在处理下一行,直至全文处理结束. Sed可做的编辑动作包括删除.查找替换.添加.插入.从其他文件中读入数据等,如果想对修改后的流文件进行保存更改,则需要使用重定向对修改后输出的内容进行保存 Sed的用法:sed  [optio

linux文本处理工具

linux文本处理工具 1.Linux 文件系统上的特殊权限: SUID     SGID   Sticky 进程的安全上下文:(1)任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行去权限 (2)启动为进程后,其属主为发起者,属组为发起者所属的组 (3)进程访文件的权限,取决于进程的发起者 (a)  进程的发起者,同文件的属主:则应用文件属主权限                                            (b)  进程的发起者,属于文件属组:则

Linux文本处理工具AWK使用解析

在linux系统上有三大文本处理工具分别是:grep,sed,awk,这次主要来看看awk. awk  option  'pattern'  file -F    指定分隔符: -v     申明自定义变量: 查看当前系统上,用户名和用户shell,输出分隔符为~. # awk -F: 'BEGIN{OFS="~";print "UserName   Shell"}{print $1,$7}END{print "================end===