Open YohLee opened 6 years ago
一、vi查找:
当你用vi打开一个文件后,因为文件太长,如何才能找到你所要查找的关键字呢?在vi里可没有菜单-〉查找,不过没关系,你在命令模式下敲斜杆(/)这时在状态栏(也就是屏幕左下脚)就出现了 “/”然后输入你要查找的关键字敲回车就可以了。如果你要继续查找此关键字,敲字符n就可以继续查找了。值得注意的是“/”是向下查找,而“?”是向上查找,而在键盘定义上“?”刚好是“/”的上档符。
二、vi替换: vi/vim 中可以使用 :s 命令来替换字符串以前只会使用一种格式来全文替换,今天发现该命令有很多种写法(vi 真是强大啊飕还有很多需要学习),记录几种在此,方便以后查询。 :s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky n 为数字,若 n 为 .,表示从当前行开始到最后一行 :%s/vivian/sky/(等同于:g/vivian/s//sky/)替换每一行的第一个 vivian 为 sky :%s/vivian/sky/g(等同于:g/vivian/s//sky/g)替换每一行中所有 vivian 为 sky
可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符 :s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/ :%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 /):/oradata/apras/替换成/user01/apras1/
vim(vi)常用操作及记忆方法
vi(vim)可以说是linux中用得最多的工具了,不管你配置服务也好,写脚本也好,总会用到它。但是,vim作为一个“纯字符”模式下的工具,它的操作和WINDOWS中的文本编辑工具相比多少有些复杂。这里,我根据自己个人的使用经验,整理了一套vim的操作以及记忆的方法,希望对大家的学习有所帮助。
VI的三种模式 1,命令模式 2,输入模式 3,末行模式
命令 执行的操作 记忆方法 :q 退出 quit :w 存盘 write :e 打开新文件 :r 读取文件到VI read :! 强行 :set nu 显示行号 number :set nonu 隐藏行号 no number
h j k l 左 下 上 右
Ctrl + f 翻到下一页(向前翻页) front Ctrl + b 翻到上一页(向后翻页) back Ctrl + u 向前翻半页 Ctrl + d 向后翻半页
^ 移到行头 往上就到行头了(象形) $ 移到行尾 写完一行就要给一行的钱 w 下一个单词 word b 前一个单词 behind(在。。。后面) e 下一单词尾 end
i 光标前插入 insert a 光标后加入 add A 在行末加入 在一个词后是小a,一个行后就是大A o 另起一行加入 一个小鸡蛋(小o)掉下来了摔开了花 O 上一行加入 吐一个大泡泡(大O)飞上去破了
---------- c(吃掉)代表行内删除--------
cw 删除一个单词(一部分不包括空格) 吃掉一个 word
c$ 删除一行到行尾 刚写的一行被删了,钱也拿不到了
c^ 删除一行到行头 往上吃,一直吃到头
x 删除一个字符 看你不爽就打上“x”
---------- d 代表删除-------------- dd 删除一行 del dir dw 删除单词到尾部(包括空格) del word de 删除单词到尾部(不包括尾部空格) del end d$ 删除当前到行尾的所有字符 del $(代表尾部) d^ 删除当前到行首的所有字符 del ^(代表行首) J 合并当前行 一个大钩子(J)把下面的一行拉到自己行尾 u 撤销上次操作 undo U 撤销当前行所有操作 事情闹大了,得有个更大的UNDO才能恢复 Ctrl + r 恢复undo 前 recover
VI中的多行删除 单行删除:1(待删除行)d 多行删除:1,10d
光标所在行,dd 光标所在行以下的N行,Ndd
--------- y 代表复制到缓存中----------- yy 复制当前行整行的内容到vi缓冲区 yw 复制当前光标到单词尾字符的内容到vi缓冲区 y$ 复制当前光标到行尾的内容到vi缓冲区 y^ 复制当前光标到行首的内容到vi缓冲区 p 读取vi缓冲区中的内容,并粘贴到光标当前的位置(不覆盖文件已有的内容)
/word 从上而下查 /是从上而下写的吧 ?word 从下而上查找 字符在哪儿呢(?)回头找找吧 n 定位下一个匹配的 相当于向下查找下一个 next N 定位上一个匹配的 相当于向上查找上一个
:s/1/2 搜索当前行第一个1并用2代替 search :s/1/2/g 搜索当前行所有的1并用2代替 global :#,#s/1/2/g 在#,#间搜索所有1并用2替换 :%s/1/2/g 在整个文档中将1替换为2 100%(全部) :s/1/2/c 每次替换都给出提示确认 cue提示
vim 1.txt 2.txt 3.txt 同时打开多个文档 :args 显示多文件信息(会在末行提示当前打开了哪些档) are globals :next 切换到下一个文件 :prev 切换到上一个文件 :first 定位首文件 :last 定位尾文件 Ctrl + ^ 快速切换到编辑器中切换前的文件
vi的基本概念 基本上vi可分为三种操作状态,分别是命令模式(Command mode)、插入模式(Insert mode)和底线命令模式(Last line mode),各模式的功能区分如下: 1. Comand mode:控制屏幕光标的移动,字符或光标的删除,移动复制某区段及进入Insert mode下,或者到Last line mode。 2. Insert mode:唯有在Insert mode下,才可做文字数据输入,按Esc等可回到Comand mode。 3. Last line mode:将储存文件或离开编辑器,也可设置编辑环境,如寻找字符串、列出行号等。 不过可以把vi简化成两个模式,即是将Last line mode也算入Command mode,把vi分成Command 和Insert mode。
vi的基本操作 进入vi 在系统提示符号输入vi及文件名称后,即可进入vi全屏幕编辑画面: $ vi testfile 有一点要特别注意,就是您进入vi之后是处于“Command mode”下,您要切换到Insert mode才能输入文字。初次用vi的用户都会想先用上下左右键移动光标,结果电脑一直叫,把自己气个半死,所以进入vi后,先不要乱动,转换入Insert后再说。 切换至Insert mode编辑文件 在Command mode下按‘i’、‘a’或‘o’三键就可进入Insert mode。这时候您就可以开始输入文字了。 i: 插入,从目前光标所在之处插入所输入的文字。 a: 增加,目前光标所在的下一个字开始输入文字。 o: 插入新的一行,从行首开始输入文字。 Insert的切换→Command mode,按Esc键 您目前处于Insert mode,您就只能一直打字。假如您发现打错字了,想用光标键往回移动,将该字删除,就要按ESC键转换回Command mode,再删除文字。 离开vi及存文件 在Command mode下,可按冒号“:”键入入Last line mode,例如: :w filename (输入“w filename”,将文章存入指定的文件名filename) :wq (输入“wq”,因为进入之时已经指定文件名testfile,所以会写入testfile并离开vi) :q! (输入“q!”,强制离开并放弃编辑的文件)
Command mode功能键列表 在介绍command mode指令的时后,指令后面加上“常用”字眼的功能键,表示比较常用的vi指令,请读者您一定要学会、记住。 (1)I、a、o切换进入Insert mode。[超级常用] (2)移动光标 vi可以直接用键盘上的光标键来上下左右移动,但正规的vi是用小写英文字母 h、j、k、l,分别控制光标左、下、上、右移一格。 按Ctrl+B:屏幕往后移动一页。[常用] 按Ctrl+F:屏幕往前移动一页。[常用] 按Ctrl+U:屏幕往后移动半页。 按Ctrl+D:屏幕往前移动半页。 按 0 (数字零):移动文章的开头。[常用] 按 G:移动到文章的最后。[常用] 按 w:光标跳到下个word的开头。[常用] 按 e:光标跳到下个word的字尾。 按 b:光标回到上个word的开头。 按 $:移到光标所在行的行尾。[常用] 按 ^:移到该行第一个非空白的字符。 按 0:移到该行的开头位置。[常用] 按 #:移到该行的第#个位置,例:51、121。[常用] (3)删除文字 x:每按一次删除光标所在位置的后面一个字符。[超常用]
X:大字的X,每按一次删除光标所在位置的前面一个字符。
dd:删除光标所在行。[超常用]
(4)复制 yw:将光标所在处到字尾的字符复制到缓冲区中。 (想在和#x、#X的功能相反) p:将缓冲区内的字符粘贴到光标所在位置(指令‘yw’与‘p必须搭配使用)。 yy:复制光标所在行。[超常用] p:复制单行到您想粘贴之处。(指令‘yy’与‘p’必须搭配使用)
p:复制多行到您想粘贴之处。(指令‘#yy’与‘p’必须搭配使用) “ayy:将复制行放入buffer a, vi提供buffer功能,可将常用的数据存在buffer “ap:将放在buffer a的数据粘贴。 “b3yy:将三行数据存入buffer b。 “b3p:将存在buffer b的资料粘贴 (5)取代 r: 取代光标所在处的字符:[常用] R:取代字符直到按Esc为止。 (6)复原(undo)上一个指令 u:假如您误操作一个指令,可以马上按u,回复到上一个操作。[超常用] .: .可以重复执行上一次的指令。 (7)更改 cw:更改光标所在处的字到字尾$处。 c#w:例如,c3w代表更改3个字。 (8)跳至指定行 Ctrl+G:列出光标所在行的行号。
Last line mode下指令简介 读者您要使用Last line mode之前,请记得先按Esc键确定您已经处于Command mode下后,再按冒号“:”或“/”或“?”三键的其中一键进入Last line mode。 1.列出行号 set nu: 输入“set nu”后,会在文章的每一行前面列出行号。 2.跳到文章的某一行
3.寻找字符串 /关键字:先按/,再输入您想寻找的字,如果第一次找的关键字不是您相尽可能的,可以一直按n会往下寻找到您要的关键字为止。 ?关键字:先按?,再输入您想寻找的字,如果第一次找的关键字不是您想要的,可以按n会往前寻找到您要的关键字为止。 4.取代字符串 1,$s/string/replae/g:在last line mode输入“1,$s/string/replace/g”会将全文的string字符串取代为replace字符串,其中1,$s就是指搜寻区间为文章从头至尾的意思,g则是表示全部取代不必确认。 %s/string/replace/c:同样会将全文的string字符串取代为replace字符串,和上面指令不同的地方是,%s和1,$s是相同的功能,c则是表示要替代之前必须再次确认是否取代。 1,20s/string/replace/g:将1至20行间的string替代为relpace字符串。 5.存文件 w:在last line mode提示符号“:”前按w即可将文件存起来。[超常用]
6.离开 q:按q就离开,有时如果无法离开vi,可搭配“!:强置离开vi,如“q!” qw:一般建议离开时,搭配w一起使用,如此离开时还可存文件。[常用]
进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后一行首 vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename vi filename....filename :打开多个文件,依次进行编辑
移动光标类命令 h :光标左移一个字符 l :光标右移一个字符 space:光标右移一个字符 Backspace:光标左移一个字符 k或Ctrl+p:光标上移一行 j或Ctrl+n :光标下移一行 Enter :光标下移一行 w或W :光标右移一个字至字首 b或B :光标左移一个字至字首 e或E :光标右移一个字至字尾 ) :光标移至句尾 ( :光标移至句首 }:光标移至段落开头 {:光标移至段落结尾 nG:光标移至第n行首 n+:光标下移n行 n-:光标上移n行 n$:光标移至第n行尾 H :光标移至屏幕顶行 M :光标移至屏幕中间行 L :光标移至屏幕最后行 0:(注意是数字零)光标移至当前行首 $:光标移至当前行尾
屏幕翻滚类命令 Ctrl+u:向文件首翻半屏 Ctrl+d:向文件尾翻半屏 Ctrl+f:向文件尾翻一屏 Ctrl+b;向文件首翻一屏 nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
插入文本类命令 i :在光标前 I :在当前行首 a:光标后 A:在当前行尾 o:在当前行之下新开一行 O:在当前行之上新开一行 r:替换当前字符 R:替换当前字符及其后的字符,直至按ESC键 s:从当前光标位置处开始,以输入的文本替代指定数目的字符 S:删除指定数目的行,并以所输入文本代替之 ncw或nCW:修改指定数目的字 nCC:修改指定数目的行
删除命令 ndw或ndW:删除光标处开始及其后的n-1个字 do:删至行首 d$:删至行尾 ndd:删除当前行及其后n-1行 x或X:删除一个字符,x删除光标后的,而X删除光标前的 Ctrl+u:删除输入方式下所输入的文本
搜索及替换命令 /pattern:从光标开始处向文件尾搜索pattern ?pattern:从光标开始处向文件首搜索pattern n:在同一方向重复上一次搜索命令 N:在反方向上重复上一次搜索命令 :s/p1/p2/g:将当前行中所有p1均用p2替代 :n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代 :g/p1/s//p2/g:将文件中所有p1均用p2替换
选项设置 all:列出所有选项设置情况 term:设置终端类型 ignorance:在搜索中忽略大小写 list:显示制表位(Ctrl+I)和行尾标志($) number:显示行号 report:显示由面向行的命令修改过的数目 terse:显示简短的警告信息 warn:在转到别的文件时若没保存当前文件则显示NO write信息 nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符 nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始 mesg:允许vi显示其他用户用write写到自己终端上的信息
最后行方式命令 :n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下 :n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下 :n1,n2 d :将n1行到n2行之间的内容删除 :w :保存当前文件 :e filename:打开文件filename进行编辑 :x:保存当前文件并退出 :q:退出vi :q!:不保存文件并退出vi :!command:执行shell命令command :n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入 :r!command:将命令command的输出结果放到当前行
寄存器操作 "?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字 "?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字 "?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字 "?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字 ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。
一、插入文本 ┌──┬────────────┐ │命令│描述 │ ├──┼────────────┤ │i │在当前字符前插入文本 │ ├──┼────────────┤ │I │在行首插入文本 │ ├──┼────────────┤ │a │在当前字符后添加文本 │ ├──┼────────────┤ │A │在行末添加文本 │ ├──┼────────────┤ │o │在当前行后面插入一空行 │ ├──┼────────────┤ │O │在当前行前面插入一空行 │ ├──┼────────────┤ │R │以改写方式输入文本 │ └──┴────────────┘ 二、移动光标 ┌─────┬───────────┐ │命令 │描述 │ ├─────┼───────────┤ │j或下箭头 │向下移动一行 │ ├─────┼───────────┤ │k或上箭头 │向上移动一行 │ ├─────┼───────────┤ │h或左箭头 │左移一个字符 │ ├─────┼───────────┤ │l或右箭头 │右移一个字符 │ ├─────┼───────────┤ │w │右移一个词 │ ├─────┼───────────┤ │W │右移一个以空格分隔的词│ ├─────┼───────────┤ │b │左移一个词 │ ├─────┼───────────┤ │B │左移一个以空格分隔的词│ ├─────┼───────────┤ │0 │移到行首 │ │Ctrl-F │向前翻页 │ ├─────┼───────────┤ │Ctrl-B │向后翻页 │ ├─────┼───────────┤ │nG │到第n行 │ ├─────┼───────────┤ │G │到最后一行 │ └─────┴───────────┘ 三、替换文本 ┌─────┬──────┐ │命令 │描述 │ ├─────┼──────┤ │$ │到行尾 │ ├─────┼──────┤ │( │到句子的开头│ ├─────┼──────┤ │) │到句子的末尾│ ├─────┼──────┤ │{ │到段落的开头│ ├─────┼──────┤ │} │到段落的末尾│ └─────┴──────┘
四、删除文本 ┌───┬───────────┐ │命令 │描述 │ ├───┼───────────┤ │r │替换一个字符 │ ├───┼───────────┤ │c │修改文本直到按下Esc健 │ ├───┼───────────┤ │cw │修改下一个词 │ ├───┼───────────┤ │cnw │修改接下来的n个词 │ └───┴───────────┘ 五、文本编辑 ┌──┬──────────────────────┐ │命寺│描述 │ ├──┼──────────────────────┤ │yy │将一行文本移到缺省缓冲区中 │ ├──┼──────────────────────┤ │yn │将下一个词移到缺省缓冲区中 │ ├──┼──────────────────────┤ │ynw │将后面的n个词移到缺省缓冲区中 │ ├──┼──────────────────────┤ │p │如果缺省缓冲区中包含一行文本,则在当前 │ │ │行后面插入一个空行井将缺省缓冲区中的声 │ │ │容粘贴到这一行中;如果缺省缓冲区中包含 │ │ │多个词,把这些词粘贴到光标的右边. │ ├──┼──────────────────────┤ │P │如果缺省缓冲区中包含一行文本,则正当前 │ │ │行前面插入一个空行井将缺省缓冲区中的内 │ │ │容粘贴到这一行中;如果缺省缓冲区中包含 │ │ │多个词,把这些词粘贴到光标的左边
│ └──┴──────────────────────┘
Shell 文件包含
和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。
Shell 文件包含的语法格式如下:
. filename # 注意点号(.)和文件名中间有一空格
或
source filename
实例
创建两个 shell 脚本文件。
test1.sh 代码如下:
url="http://www.runoob.com"
test2.sh 代码如下:
. ./test1.sh
echo "菜鸟教程官网地址:$url"
接下来,我们为 test2.sh 添加可执行权限并执行:
$ chmod +x test2.sh $ ./test2.sh 菜鸟教程官网地址:http://www.runoob.com
注:被包含的文件 test1.sh 不需要可执行权限。
Shell 函数
linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。
shell中函数的定义格式如下:
[ function ] funname [()]
{
action;
[return int;]
}
说明:
1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
下面的例子定义了一个函数并进行调用:
demoFun(){ echo "这是我的第一个 shell 函数!" } echo "-----函数开始执行-----" demoFun echo "-----函数执行完毕-----"
输出结果:
-----函数开始执行----- 这是我的第一个 shell 函数! -----函数执行完毕-----
下面定义一个带有return语句的函数:
funWithReturn(){ echo "这个函数会对输入的两个数字进行相加运算..." echo "输入第一个数字: " read aNum echo "输入第二个数字: " read anotherNum echo "两个数字分别为 $aNum 和 $anotherNum !" return $(($aNum+$anotherNum)) } funWithReturn echo "输入的两个数字之和为 $? !"
输出类似下面:
这个函数会对输入的两个数字进行相加运算... 输入第一个数字: 1 输入第二个数字: 2 两个数字分别为 1 和 2 ! 输入的两个数字之和为 3 !
函数返回值在调用该函数后通过 $? 来获得。
注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。 函数参数
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...
带参数的函数示例:
funWithParam(){ echo "第一个参数为 $1 !" echo "第二个参数为 $2 !" echo "第十个参数为 $10 !" echo "第十个参数为 ${10} !" echo "第十一个参数为 ${11} !" echo "参数总数有 $# 个!" echo "作为一个字符串输出所有参数 $* !" } funWithParam 1 2 3 4 5 6 7 8 9 34 73
输出结果:
第一个参数为 1 ! 第二个参数为 2 ! 第十个参数为 10 ! 第十个参数为 34 ! 第十一个参数为 73 ! 参数总数有 11 个! 作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !
注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。
另外,还有几个特殊字符用来处理参数: 参数处理 说明 $# 传递到脚本的参数个数 $ 以一个单字符串显示所有向脚本传递的参数 $$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的ID号 $@ 与$相同,但是使用时加引号,并在引号中返回每个参数。 $- 显示Shell使用的当前选项,与set命令功能相同。 $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
iostat ---可通过iostat命令查看io,内容,吞吐量 sar ---可通过iostat命令查看io,内容,吞吐量 man 命令 查看命令选项
https://www.cnblogs.com/nzbbody/p/4391802.html Linux shell 提取文件名和目录名 ${}用于字符串的读取,提取和替换功能,可以使用${} 提取字符串 1、提取文件名 [root@localhost log]# var=/dir1/dir2/file.txt [root@localhost log]# echo ${var##/} file.txt 2、提取后缀 [root@localhost log]# echo ${var##.} txt 3、提取不带后缀的文件名,分两步 [root@localhost log]# tmp=${var##/} [root@localhost log]# echo $tmp file.txt [root@localhost log]# echo ${tmp%.} file 4、提取目录 [root@localhost log]# echo ${var%/*} /dir1/dir2
使用文件目录的专有命令basename和dirname 1、提取文件名,注意:basename是一个命令,使用$(), 而不是${} [root@localhost log]# echo $(basename $var) file.txt 2、提取不带后缀的文件名 [root@localhost log]# echo $(basename $var .txt) file 3、提取目录 [root@localhost log]# dirname $var /dir1/dir2 [root@localhost log]# echo $(dirname $var) /dir1/dir2
linux之sed用法
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法 sed命令行格式为: sed [-nefri] ‘command’ 输入文本
常用选项: -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 就是啦!
举例:(假设我们有一文件名为ab) 删除某行 [root@localhost ruby] # sed '1d' ab #删除第一行 [root@localhost ruby] # sed '$d' ab #删除最后一行 [root@localhost ruby] # sed '1,2d' ab #删除第一行到第二行 [root@localhost ruby] # sed '2,$d' ab #删除第二行到最后一行
显示某行 . [root@localhost ruby] # sed -n '1p' ab #显示第一行 [root@localhost ruby] # sed -n '$p' ab #显示最后一行 [root@localhost ruby] # sed -n '1,2p' ab #显示第一行到第二行 [root@localhost ruby] # sed -n '2,$p' ab #显示第二行到最后一行
使用模式进行查询 [root@localhost ruby] # sed -n '/ruby/p' ab #查询包括关键字ruby所在所有行 [root@localhost ruby] # sed -n '/\$/p' ab #查询包括关键字$所在所有行,使用反斜线\屏蔽特殊含义
增加一行或多行字符串 [root@localhost ruby]# cat ab Hello! ruby is me,welcome to my blog. end [root@localhost ruby] # sed '1a drink tea' ab #第一行后增加字符串"drink tea" Hello! drink tea ruby is me,welcome to my blog. end [root@localhost ruby] # sed '1,3a drink tea' ab #第一行到第三行后增加字符串"drink tea" Hello! drink tea ruby is me,welcome to my blog. drink tea end drink tea [root@localhost ruby] # sed '1a drink tea\nor coffee' ab #第一行后增加多行,使用换行符\n Hello! drink tea or coffee ruby is me,welcome to my blog. end
代替一行或多行 [root@localhost ruby] # sed '1c Hi' ab #第一行代替为Hi Hi ruby is me,welcome to my blog. end [root@localhost ruby] # sed '1,2c Hi' ab #第一行到第二行代替为Hi Hi end
替换一行中的某部分 格式:sed 's/要替换的字符串/新的字符串/g' (要替换的字符串可以用正则表达式) [root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby/bird/g' #替换ruby为bird [root@localhost ruby] # sed -n '/ruby/p' ab | sed 's/ruby//g' #删除ruby
#################################################### ##############可以替换文本中相应的字符串############### #################################################### sed -i '/匹配字符串/s/替换源字符串/替换目标字符串/g' filename
sed -i '$a ]' CustPackageInstHis.json.bak 追加到第一行
sed -i '1i [' CustPackageInstHis.json.bak 追加到最后一行
sed -i 's/替换源字符串/替换目标字符串/g' filename
--将data/add/替换成data_bak/20180324/2018032400/data/add/----"\"转义字符 sed -i 's/data\/add/data_bak\/20180324\/2018032400\/data\/add/g' filename sed -i 's/2018032400/2018032402/g' *.yml