linux温故知新九

sed 高级编辑命令、模式空间、保持空间、vi 可视化模式、vimrc、地址定界

sed(stream deitor):行编辑器

【概述】sed是一种流式编辑器,它一次处理一行内容。处理时,把当前处理的行的所有内容存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,逐行处理,不修改文件。sed主要用于处理多个文件,简化对文件的反复操作,编写转换程序等。

用法:sed 【option】… ‘script’ file…

【option】

-n:关闭模式空间内容的自动输出,默认输出全文包括修改的行,注意使用场合,如除了p命令外,需要显示除了被匹配的模式外的内容时不用

-e:多点编辑,合并处理

-f /Path/file:从指定文件中读取脚本,调用脚本,不用加引号

-r:支持扩展的正则表达式

-i:原处编辑,修改文件 sed -i.bak ‘3a\sss’ file #创建备份

【script】

地址定界:# #,# +# /pat1/,/pat2/ /^$/匹配多行的空行

~步进:1~2奇数行 2~2偶数行

【编辑命令】

p: 显示模式空间中被修改的行

d: 删除模式空间匹配的行

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

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

c \text:替换行为单行或多行文本

w /path/to/somefile: 保存模式匹配的行至指定文件

r /path/from/somefile:读取指定文件的文本至模式空间中匹配到的行后

= 为模式空间中的行的下方打印行号

! 模式空间中匹配行取反处理

【查找与替换】

s/ / /:可用@、#代替 / 号

s/pattern/&new&/p:在查找内容追加,&代表pattern

g:行内全局替换

p:显示替换成功的行

w /Path/to/where:替换成功的行保存至文件中

【命令操作】

sed -n ‘2,+2p’ file #2到4行的内容

sed -n ‘/abc/p’ file #包含abc的行

sed -n ‘2,/abc/p’ file #2到被模式匹配的行

sed ‘2i\s\nss’ file #2行后面插入多行

sed ‘2a\s\nss’ file #2行后面追加多行

sed ‘2c\word’ file #改变2行内容

sed -n ‘/abc/=’ file #显示abc所在的行号,无内容

sed -n -e ‘/^abc/p’ -e ‘/^abc/=’ #显示abc开头的行号和内容

sed -n ‘/^$/=’ file #显示空行行号

sed -n -e ‘/^$/p’ -e ‘/^$/=’ file #在空行下方行号

sed ‘/^$/d’ file #去除空行

sed ‘s/oldword/replace/g’ file #替换每一行中需要替换的内容

sed -n ‘s/root/&superman/p’ /etc/passwd #单词后追加,显示被修改的行

sed -n‘s/root/superman&/p’ /etc/passwd #单词前追加

sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets #显示全文包括修改的行

sed -i.bak ‘s/dog/cat/g’ pets #创建备份文件,并修改文件内容

【高级编辑命令】

sed -n ‘n;p’ file #把模式空间中的内容覆盖至保持空间中

sed ‘1!G;h;$!d’ file #除了第一行都覆盖模式空间;覆盖到保持空间;删除模式空间行:倒序

sed ‘$!N;$!D’ file #读两行;删除多行模式空间:最后两行

sed ‘G’ file #追加单行模式空间:增加空行

sed ‘g’ file #覆盖模式空间:替换空行

sed ‘/^$/d;G’ file #删除空行;追加模式空间:两空行

sed ‘n;d’ file #读取下一行并覆盖;删除模式空间行(无-n显示模式空间d删除模式空间行就跳过了一行):显示奇数行

sed -n ‘1!G;h:$p’ #除了第一行都覆盖模式空间;覆盖保持空间;显示修改过程

【总结】:sed是流式的编辑器,每次读取一行到模式空间再处理,因此不会对原文件操作。当模式空间的行被修改过可用p进行指定,-n关闭模式空间的自动打印,这样就实现了特定的匹配;无-n与p就实现了模式空间内容全部打印,如使用d删除某匹配的行再打印。除了模式空间sed还存在保持空间,通过高级编辑命令对模式空间与保持空间的覆盖、追加、删除等操作实现了较为复杂的文本处理如:文本倒序、邮件信息处理等等

打开文件

vi +# file #定位

vi + file #最后一行

vi +/pattern file #定位到第一个模式所在行

vi -b hexfile #hex文件

vi -d file1 file2 #比较打开多个文件,高亮显示不同处

vi -m file #只读方式打开

gf #打开光标处文件名的文件,如main.c

ctrl ^ #切换到上次打开的文件。等于 :first

三种模式及转换

命令模式(command mode)(默认):主要是查看文件内容,控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到external mode

ctrl s | ctrl q #锁定了,无反应,q解锁

shift ~ #小写变大写,小写变大写

shift # #高亮向上找当前光标相同的单词

shift * #高亮向下找相同单词,noh取消高亮

shift zz #(ZZ)保存并退出,ZQ不保存退出

翻页(屏幕):ctrl d(下半) ctrl u(上半) ctrl f(下一屏) ctrl b(上一屏) PgUP

翻页(光标):zt(光标行滚动到第一行) zz(光标行滚中间) zb(光标行滚底- 端) #zt(第#行滚到第一行) #zz #zb

单词跳转:w下首 e下尾 b当前、上首

光标移动:arrow j、k、h、l

光标定位(行内):0 ^ $

光标定位(配对):% #跳转到匹配的) ] }

光标定位(行内字符):f_(定位到本行第一个) F(往前定位到_)

光标定位(全文):#G(第#行) gg(第1行) G(末行) H\M\L(当前屏的第一行个、中间、最后一行的第一个位置)

光标定位(句子):shift( #上一句 shift ) #下一句

光标定位(屏幕行):g(arrow j k ^ $) #当句子太长时,屏幕行非常方便

光标定位(段落):shift } #下一段 shift } #下一段

光标定位(函数): [[ #上一个函数 ]] #下一个函数

光标书签设置及跳转:m a-z #设置光标书签,用26个字母表示 ` a-z 跳转到书签

增加缩进:可配合可视化选择 >增加缩进 <减少缩进

删除命令:d(^ $ 0 w e b ( { ) } gg 1G G)解释一下(行第一个可见字符、行尾、行首、下一个单词首、下一个单词尾、当前或上一个单词首、上一句、上一段、下一句、下一段、文首、文末) dd(删除当前行) D(删除之行尾)=d$

剪切命令:x(单个字符) #x(光标开始#个字符) xp(交换当前x内容到下一个字符之后)

删除、剪切、改变命令,存放在数字1寄存器中

替换字符:R(整行) r(单个字符)

复制命令:y(^ $ 0 w e b ( { ) } gg 1G G)

粘贴命令:p光标之后 P光标之前(粘贴单词时用P从行首复制,单词完整)

配对的符号操作:先进入该配对符号中再执行以下命令

更改内容:ci【’ ” ( { [ <】

删除内容:di【’ ” ( { [ <】

复制内容:yi【’ ” ( { [ <】

选中内容:vi【’ ” ( { [ <】

命令模式输入数字,进入插入模式输入字符,ESC…… #重复n次输入

# y|d|gU|gu #如0y$ 表示从本行开头到末尾的复制,gU变大写,gu变小写

u撤销 ctrl r重做 #u撤销#次

U撤销光标落在这行后所有对此行的更改

插入模式(insert mode):vi被运行时,通常处在命令模式下,键入以下命令可以使vi退出命令模式,进入插入模式(命令模式 ——> 插入模式):

I(i)行首与当前位置、A(a)行尾与当前位置、O(o)上行与下行

S #删除一行并进入insert模式

s #删除当前光标字母进入insert模式

数字 s (arrow h、j、k、l)删除光标之后的#个字母

cc #删除一行并进入insert模式

改变字符:c($ ^ 0 c w e b ( { ) } gg 1G G) 数字 c(arrow 、h、j、k、l) #删除并进入插入模式

扩展模式(external command):ex file 或 vi -e 直接进入ex模式。可将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……不过一般我们在使用时把vi简化成两个模式,就是将扩展模式(external mode)也算入命令行模式(command mode)

:wq : x ZZ

:r file

:w filename #另存为

!command #执行命令

r!command #读入命令的结果

:# #第几行

【地址定界】

start_pos,end_pos

使用方式:后跟一个编辑命令d、y、w newfile(可 >> 追加至文件)、r file

# #具体行

#,+# #从前面的#行再加#行的范围

. #当前行

% #全文,相当于 1,$

/pattern/,/pattern/ #模式匹配,从第一次被匹配到的行到pattern2被匹配的行

#,/pattern/ #模式匹配,从#行到pattern被匹配到的行

/pattern/,$ #从/pattern/到文末的行

【查找】

/pattern #向下查找 n N

/?pattern #向上查找 N n

【查找并替换】

s/find/replace/修饰符

i:忽略大小写

g:全局替换,默认是替换每行第一次出现的

gc:全局替换,加提示

@、#代替分割符/ ,避免多次使用转义

vim的寄存器

a-z,A-Z寄存器,0-9数字寄存器,”未命名寄存器(不指定时默认的register),-短删除寄存器

命名寄存器:#”f yy表示复制#行到f寄存器中;而 “fp表示读取粘贴;扩展模式:#put f 放置f寄存器内容到第5行

数字寄存器,0存放最近复制的内容,1存放最近的删除内容。当新的文本变更和删除时,1转存到2,2到3……不同会话不能共享内容

查看寄存器内容在扩展模式 :register f #显示寄存器内容

vim编辑二进制文件

vim -b binfile #打开二进制文件

在扩展命令模式下,利用 :%!xxd 转换打开的2进制文件为16进制可读文件,修改之后 :%!xxd -r返回再退出

可视化模式

v #字符可视化模式(characterwise visual mode),选择的单位是字符

gv #选中上次可视化模式时选择的文本

V #行可视化模式(Linewise visual mode),选择的单位是行

Ctrl V #块可视化模式(Blockwise visual mode),选择单位是块

切换可视化模式:在命令模式下v或V或ctrl v进入可视化模式,在v可视化模式ctrl v- 进入块可视化,Esc等待1秒退出

在可视化模式下编辑:在可视化模式下可完成删除、复制、~大小写转换、>增加缩进、J合并为一行、w newfile另存为、sort排序

vim 多个窗口

vim file1 file2 file3多文件模式

:next :prev :first :last ctrl ^

:wall :qall :wqall

多个文件分割

vim -(O)o file1 file2……

ctrl w + arrow

单个文件分割

ctrl w+s #水平分割多次

ctrl w+v #垂直分割多次

ctrl w+q #取消相邻的,ctrl w+o取消其他所有的

vim配置文件

个人:~/.vimrc #默认不存在的配置文件,打开vim时自动加载

全局:/etc/vimrc

设置vim的工作特性

行号:set【nu(number),nonu】

括号匹配:set【sm(showmatch),nosm】

自动缩进:set【ai,noai】

高亮搜索:set【hlsearch,nohlsearch】,取消也可以noh

语法高亮:【syntax on,syntax off】

忽略大小写:set【ic,noic】

文件格式:【fileformat=nuix,fileformat=dos】

文本宽度:set【textwidth=65,wrapmargin=15】

自动缩进宽度:set【shiftwidth=4】

拼写检查:set 【spell,nospell】

:h(help)

:set (set all) #全部set topic

:h topic

vimtutor #tutor

时间: 2024-10-25 13:21:17

linux温故知新九的相关文章

1.9 linux基础(九)-文件查找find

1.9 linux基础(九)-文件查找find 1.9.1 文件查找 在文件系统上查找符合条件的文件 文件查找:locate, find 非实时查找(数据库查找):locate 实时查找:find 1.9.2 locate 查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db 依赖于事先构建的索引 索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库 (updatedb) 索引构建过程需要遍历整个根文件系统,极消耗资源 工作特点: 查找速度快

linux温故知新五

Linux批量创建用户.passwd.shadow.组管理.group.gshadow.默认配置文件login.defs.切换用户su.提升权限 在Linux中用户运行某个程序时,该程序的权限属于当前用户,进程所能够访问资源的权限取决于进程的运行者的身份.如果用户的id号为0,即使不叫root,他也是管理员:就算名字叫root它也可能是普通用户.当有多个不同名字的管理员时他们的id号都是0,不同名字管理员的操作也会分开记录,便于查阅.设置id号的另一便捷之处在于用户文件的交接,即管理员删除原用户

linux温故知新六

Linux批量创建用户.passwd.shadow.组管理.group.gshadow.默认配置文件login.defs.切换用户su.提升权限(二) Linux对于权限的管理非常完善,其强大的权限管理机制体现了它的魅力之处,让无数人为之操碎了心.Linux中的权限既能放也能收,既可以管理整个组的权限,也可以管理单个用户的权限,正是因为有了ACL的加入变得非常灵活,对不属于主和其他的用户增加了权限,对于目录的w权限造成的文件不安全也有Stick位,保证私人财产的安全--总之Linux的权限管理特

linux温故知新七

文本处理.正则表达式.cut.grep.egrep.fgrep Linux中文本处理工具最常用的就是文本处理三剑客grep.sed.awk再配合正则表达式,可以实现足够多的文本处理功能.工具的强大之处是因为使用它的人,如何才能发挥文本处理工具的作用呢?答案就是正则表达式,其实正则表达式,只是一种思想,一种表示方法,只要我们使用的工具支持表示这种思想那么这个工具就可以处理正则表达式的字符串.这部分内容可以说是学习shell脚本之前必学的内容,理解越深刻那么shell脚本编写能力就会越强. 文本处理

linux温故知新十

find命令.归档压缩工具.xargs.exec.tar.xz.cpio find命令 Linux中的文件查找工具常见的有locate和find以及whereis.他们适用于不同的场合,如whereis只能用于搜索程序的二进制文件.源代码文件和man手册等相关文件,find和local能够查找磁盘上的所有文件(不包括proc和sys目录下的虚拟文件).find命令通过遍历磁盘查找文件,查找时间较长,且消耗一定的资源,和find相比,locate和whereis的查找速度非常快,而且占用较少的I/

Linux (九)服务器环境搭建

一.行为守则 1.拍摄快照 Linux系统操作非常复杂,搭建开发环境时全部使用命令完成安装过程.而在Linux系统下没有像360安全卫士那样的工具,无法让我们在安装出错后卸载干净.所以建议大家在执行安装过程的每一步时都拍摄快照,保存系统当前状态,一旦安装失败就可以恢复到之前的某个快照重新开始. 2. 系统文件操作前先备份 在服务器环境安装过程中经常需要修改配置文件.而Linux环境下配置文件动辄几百.上千行,而且需要在多处进行配置.一旦修改错误想要纠正会很困难.所以要养成一个好习惯:修改配置文件

linux温故知新八

Shell脚本.特殊变量.declare.算术运算.退出状态.条件测试.括号区别 Shell脚本基础(一)

linux基础九

1.文件描述符     INPUT:标准输入 stdin,0     OUTPUT:标准输出 stdout,1             标准错误 stderr,2              2.I/O重定向     输入重定向 <     << 此处创建文件,常用于bash中创建文件或生成菜单     cat /tmp/a.txt << EOF         a:ls /etc/passwd         b:ls /etc/default/useradd     EOF

Java研发工程师知识点总结

Java研发工程师知识点总结 最近一次更新2017年12月08日 大纲 一.Java基础(语言.集合框架.OOP.设计模式等) 二.Java高级(JavaEE.框架.服务器.工具等) 三.多线程和并发 四.Java虚拟机 五.数据库(Sql.MySQL.Redis等) 六.算法与数据结构 七.计算机网络 八.操作系统(OS基础.Linux等) 九.其他 一.Java基础(语言.集合框架.OOP.设计模式等) 1. HashMap和Hashtable的区别 Hashtable是基于陈旧的Dicti