一、文本处理工具sed

sed [option]….'script] [input-file]…

简介: sed是一种流编辑器,他一次处理一行的内容,处理时把当前处理的行存储在临时缓冲区中,这个缓冲区被称为模式空间,接着用sed命令处理,处理完成后把模式空间的内容送往屏幕,接着处理下一行,知道文件末尾,而文件的内容并没有改变。模式空间相当于sed的加工厂,除此以外,还有保持空间,用于临时存储数据。

sed的工作原理图

sed是按行编辑文本的,每次从文本中取出一行,放置到自己的模式空间里进行处理,sed对文本的内容会有匹配到的行和匹配不到的行两种情况,sed对匹配到行进行处理然后输出到屏幕上,而匹配不到的行不会进行处理,同时也会输出到屏幕上。

地址定界编辑命令

常用选项:

-n:不输出模式空间的内容至屏幕

-e:script,--expression=script:多点编辑

-f: /PATH/TO/SED_SCRIPT_FILE

每行一个编辑命令``````

-r,--regexp-extended:支持使用扩展正则表达式;

-i [SUFFIX],--in-place[=SUFFIX]:直接编辑原文件;

地址定界

(1)空地址:对全文进行处理;

(2)单地址:

#:指定行;

/pattern/:被此模式所匹配到的每一行;

(3)地址范围

#,#:

#,+#:

#,/pat1/

/pat1/,/pat2/,

(4)步进:~

1~2:所有奇数行

2~2:所有偶数行

编辑命令:

d:删除模式空间的内容

p:显示模式空间的内容

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

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

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

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

sed -n '/^[^#]/w /tmp/fstab.new' /etc/fstab

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

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

!:条件取反

格式:地址定界!编辑命令;

s///:查找替换,其分隔符可自行执行,常用的有s@@@,s###等;

替换标记:

g:全局替换;

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

p:显示替换成功的行;

例题演示:

1、删除/etc/grub2.conf文件中所有以空白开头的行行首的空白字符

[root@localhost ~]# sed -r 's@^[[:space:]]+@@g' /etc/grub2.cfg

2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

[root@localhost ~]# sed -r 's@^#[[:space:]]+@@g' /etc/fstab

#

/etc/fstab

Created by anaconda on Tue Aug  9 15:54:42 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=e19b9af8-c954-40b3-a7bb-e13de38e741a /   xfs defaults0 0

UUID=48da361a-392b-4f45-a126-4b51db7c407e /boot   xfs defaults0 0

UUID=587df6c7-785b-4318-9aec-cc0c6a203dc9 /usrxfs defaults0 0

UUID=a3b743bf-9613-42bb-9728-7c73a1fdf752 swapswapdefaults0 0

[root@localhost ~]#

3、在/root/install.log每一行行首增加#号

[root@localhost ~]# sed  's@^@#@g' /etc/fstab

#

##

## /etc/fstab

## Created by anaconda on Tue Aug  9 15:54:42 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=e19b9af8-c954-40b3-a7bb-e13de38e741a /   xfs defaults0 0

#UUID=48da361a-392b-4f45-a126-4b51db7c407e /boot   xfs defaults0 0

#UUID=587df6c7-785b-4318-9aec-cc0c6a203dc9 /usrxfs defaults0 0

#UUID=a3b743bf-9613-42bb-9728-7c73a1fdf752 swapswapdefaults0 0

[root@localhost ~]#

4、在/etc/fstab文件中不以#开头的行的行首增加#号

[root@localhost ~]# sed -r 's@^[^#]@#@g' /etc/fstab

#

# /etc/fstab

# Created by anaconda on Tue Aug  9 15:54:42 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

#

#UID=e19b9af8-c954-40b3-a7bb-e13de38e741a /   xfs defaults0 0

#UID=48da361a-392b-4f45-a126-4b51db7c407e /boot   xfs defaults0 0

#UID=587df6c7-785b-4318-9aec-cc0c6a203dc9 /usrxfs defaults0 0

#UID=a3b743bf-9613-42bb-9728-7c73a1fdf752 swapswapdefaults0 0

[root@localhost ~]#

5、处理/etc/fstab路径,使用sed命令取出其目录名和基名

[root@localhost ~]# echo "/etc/fstab" | sed -r 's@[^/]+/?$@@'

/etc/

[root@localhost ~]#

[root@localhost ~]# echo "/etc/fstab" | sed -r 's@^/[^/]+/?@@'

fstab

[root@localhost ~]#

6、利用sed取出ifconfig命令中本机的ipv4地址

[root@localhost ~]# ifconfig | sed -n '2p'| sed 's@^.*inet@@'|sed 's@netmask.*@@'

10.1.249.85

[root@localhost ~]#

7、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数。

[root@localhost Packages]# ls *.rpm|sed -r 's@.*\.(.*)\.rpm$@\1@'|sort|uniq -c

4 i686

919 noarch

2283 x86_64

[root@localhost Packages]#

sed命令的高级用法

高级编辑命令:

h:把模式空间中的内容覆盖至保持空间中

H:把模式空间中的内容追加至保持空间中

g:从保持空间取出数据覆盖至模式空间

G:从保持空间取出内容追加至模式空间

x:把模式空间中的内容与保持空间中的内容进行互换

n:读取匹配到的行的下一行覆盖至模式空间

N:追加匹配到的行的下一行至模式空间

d:删除模式空间中的行

D:删除当前模式空间开端至\n的内容(不在传至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed

二、vim编辑器

vim:模式化的编辑器

基本模式:

编辑模式,命令模式

输入模式

扩展命令行模式:

内置的命令行接口:

打开文件:

语法: #vim [options][file..]

+#:打开文件后,直接让光标处于第#行的行首;

+/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首;

模式转换:

编辑模式:默认模式

编辑模式---->输出模式:

i:insert,在光标所在处输入;

a:append,在光标所在后方输入

o:在光标所在处的下方打开一个新行;

I:在光标所在行的行首输入;

A:在光标所在行的行尾输入;

O:在光标所在处的上方打开一个新行;

输入模式------>编辑模式

ESC

编辑模式----->扩展命令行模式

:

扩展命令行模式---->编辑模式

ESC

关闭文件:

ZZ   保存并退出

:q    退出

:q!   强制退出,不保存此前的编辑操作

wq   保存并退出

:w    :q

:x    保存并退出;

:w  /PATH/TO/SOMEFIL

光标跳转: 字符间跳转 h:左 j:下 k:上 l:右 #COMMAND:跳转由#指定的个数的字符; 单词间跳转 w:下一个单词的刺手; e:当前或后一个单词的词尾 b:当前或前一个单词的词首行首行尾跳转 ^:跳转至行首的第一个非空白字符 0:跳转至行首; $:跳转至行尾

行间跳转 #G:跳转至由#指定的行; 1G,gg:第一行; G:最后一行

句间跳转:

)

(

段间跳转

}

{

翻屏:

ctrl+f:向文件尾翻一屏

ctrl+b:向文件首部翻一屏

ctrl+d:向文件尾部翻半屏

ctrl+u:向文件首部翻半屏

Enter:按行向后翻

vim编辑命令:

字符编辑:

x:删除光标所在处的字符;

#x:删除光标所在处起始的#个字符;

xp:交换光标所在处的字符与其后面的字符的位置;

替换命令

r:替换光标所在处的字符

删除命令:

d:删除命令,可结合光标跳转字符,实现范围删除;

dd:删除光标所在处的行;

#dd:删除表表所处的行起始的共#行;

粘贴命令(p,put,paste):

p:缓冲区中的内容如果为郑航,则粘贴在当前光标所在行的下方;否则,则粘贴至当前光标所在处的后方;

复制命令(yank,y):

y:复制,工作行为相似于d命令;

yy:复制一整行

#yy:复制#行

改变命令(change,c)

编辑模式----->输入模式,实现删除操作

cc:删除光标所在的行,并转换为输出模式;

vim扩展命令模式:

内建的命令行借口

(1)地址定界

:start_pos[,end_pos]

#:特定的第#行,例如5即第5行;

#,#:指定行范围,左侧为起始行,右侧为结束行;

#,+#:指定行范围,左侧为起始行绝对编号,右侧为相对左侧行号的偏移量; 例如:3,+7

%:全文

/pattern/:从光标所在处起始向文件尾部第一次被模式所匹配到的行;

/pat1/,/pat2/:从光标所在处起始,第一次由pat1匹配到行行开始,至第一次由pat2匹配到的行结束之间的所有行;

可同编辑命令一同使用,实现编辑操作

d:删除

y:复制

c:更改

w /PATH/TO/SOMEFILE:将范围内的文本保存至指定的文件中;

r /PATH/FROM/SOMEFILE:将指定的文件中的文本读取并插入至指定位置

(2)查找

/PATTERN:从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串;

?PATTERN:从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串;

n:下一个,与命令方向相同

N:上一个,与命令方向相反

(3)查找并替换

s:扩展命令行的模式;使用格式;

s/要查找的内容/替换为的内容/修饰符

要查找的内容:可使用正则表达式

替换为的内容:不能使用正则表达式,但可以引用;

如果“要查找的内容”部分在模式中使用分组符号:在"替换为的内容"中使用后向引用;

l:忽略大小写;

g:全局替换,意味着一行中如果匹配到多次,则均替换;

可把分隔符替换为其他非常用字符

s@@@

s###

VIM的多文件功能:

多文件:

vim FILE1  FILE2...

在文件间切换:

:next    下一个

:prev    上一个

:first   第一个

:last    最后一个

退出所有文件:

:wqall  保存所有文件并退出

:wall   保存所有文件

:qall  退出所有文件

多窗口:

-o:水平分割窗口

-O:垂直分割窗口

在窗口间切换:ctrl+w,ARROW

注意:单个文件也可以分割为多个窗口进行查看:

ctrl+w:水平分割窗口

ctrl+w,v:垂直分割窗口

定制vim的工作特性:

注意:在扩展命令行模式下的设定,仅对当前vim进程有效;

永久有效:

全局:/etc/vimrc

用户个人:~/.vimrc

1、行号

显示:set number,简写为set nu

取消显示:set nonumber,set nonu

2、括号匹配高亮

匹配:set showmatch,set sm

取消:set nosm

3、自动缩进

启用:set al

禁用:set noal

4、高亮搜索

启用:set hlsearch

禁用:set nohlsearch

5、语法高亮

启用:syntax on

禁用:syntax off

6、忽略字符大小写

启用:set lc

禁用:set nolc

获取帮助:

:help

:help subject

作业:

1、如何设置tab缩进为4个字符?

在.vimrc下设置:

set tabstop=4

2、复制/etc/rc.d/init.d/functions文件至/tmp目录;替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;

3、删除/tmp/functions文件中所有以#开头,且#后面至少有一个空白字符的行的行首的#号;

原创文章,作者:因为有你,如若转载,请注明出处:http://www.178linux.com/32868

linux 编辑模式使用sed,sed命令的用法和vim编辑器的使用相关推荐

  1. Linux - 编辑模式 (李作强)

    什么是 vim? Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用. 简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是 ...

  2. linux编辑模式复制快捷键,Linux vim删除、复制、粘贴快捷键

    删除 x    小写的x表示向后删除一个字符,也就是删除光标所在字符 nx  n表示数字,表示向后删除每个字符,例如:10x表示删除包括光标在内的后面10个字符 X    大写的X表示删除光标前的一个 ...

  3. Linux命令整理 —— vi 和 vim 编辑器

    一.目录结构 二 .vim 和 vim 编辑器 2.1[基本介绍] 所有的 Linux 系统都会内建 vi 文本编辑器. vim 具有程序编辑的能力,可以看做是 vi 的增强版本,可以主动的以字体颜色 ...

  4. Linux命令(10)——vim编辑器

    vim文本编辑器是可以脱离鼠标即可完成文件的编辑操作的编辑器 vim的三种工作模式 命令模式.编辑模式.末行模式 其中命名模式到编辑模式的按键为i,编辑模式到命令模式的按键为esc 命令模式到末行模式 ...

  5. linux乌班图vi怎么使用,Ubuntu上vi(vim)编辑器使用教程

    vim有3个模式:插入模式(Insert Mode).命令模式(Command Mode).低行模式(Last Line Mode).插入模式:在此模式下可以输入字符,按ESC将回到命令模式. 命令模 ...

  6. 在命令行中的vim编辑器加上行号

    在使用vim编辑器时运行脚本程序纠察缺少相应的行号,检测起来非常不方便, 所以在vim编辑器每行前面加上相应的行号: 输入命令::set nu 按下回车,完成 转载于:https://www.cnbl ...

  7. linux修复模式rpm,修复rpm命令(不小心删了rpm命令)方法

    如果用rpm -e --nodeps rpm 删除了rpm命令可以用以下方法修复 rpm相关文件下载:1./bin/rpm:binrpm.zip      2./usr/lib/下的so文件:Linu ...

  8. 5.5 进入编辑模式 5.6 vim命令模式 5.7 vim实践

    2019独角兽企业重金招聘Python工程师标准>>> 5.5 进入编辑模式 I 行首 A 行尾 5.6 vim命令模式 :nohl 不高亮 :x 如果仅查看文件后退出使用x不会更改 ...

  9. 技巧:Vim 的纵向编辑模式

    https://www.ibm.com/developerworks/cn/linux/l-cn-vimcolumn/ 开始之前 人类大脑对文字的处理是平面式的,所以我们浏览文章.查找资料或者重构代码 ...

最新文章

  1. 刻意练习:LeetCode实战 -- Task21. 二叉树的最大深度
  2. IDEA中提示:Warning:java: 源值1.5已过时, 将在未来所有发行版中删除
  3. fiddler自动保存mysql_Fiddler模拟自动响应数据
  4. 计算机应用管理试题,学习管理系统中计算机应用试卷试题及答案.docx
  5. C++学习之路 | PTA乙级—— 1031 查验身份证 (15 分)(精简)
  6. C++笔记-二维棋盘数组使用BFS(宽度优先遍历)
  7. CCF CSP 201703-1 分蛋糕
  8. flex4 BlazeDS 入门及配置
  9. 把DamnSmallLinux(DSL)安装到硬盘(虚拟机)并安装GCC
  10. 使用三边定位算法进行室内定位
  11. python将一维数组导入到excel表格,并使用Origin绘图
  12. python变异系数,Python Scipy stats.variation()用法及代码示例
  13. 【Volume X has invalid topology for mapped brick meshing】
  14. 什么是导数、方向导数、偏导数、梯度
  15. 日本地震波及芯片产业链致价格走势难料
  16. 机器翻译古文也翻车?读了20次“苟富贵勿相忘”后,谷歌:没钱的人总会被遗忘...
  17. 啊哈C——学习3.2一起来找茬
  18. linux系统下 安装docker
  19. GPRS联网过程简介
  20. 【时间规划】个性化简历

热门文章

  1. vscode配置prettier格式化工具
  2. pysaprk数据倾斜怎么解决?
  3. 网站出现安全证书过期的原因
  4. php程序root权限,root权限是什么
  5. iOS设备屏幕尺寸和适配
  6. 通过关键字查询地理坐标(天地图)
  7. javaScript中的特殊字符
  8. 大数据-玩转数据-Python几种数据采集
  9. Qt实现双击可编辑的QLabel,输入文本后回车确定
  10. 构建新型现代化智慧博物馆之物联网环境监控方案