需要
sed -n -r (不用脱义符号) -i (真实操作,不要用)
不打印; sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑),p命令可以用来打印编辑行
sed '....'d 1.txt 单引号后加d 删除 不实际删除只更改显示
替换
sed '1,10s/nologin/login/g' 1.txt
1到10行nilogin 改成login 全局
{}大括号多个sed命令;分隔开
& 是加的意思
打印指定行 sed '10'p -n 1.txt; sed '1,4'p -n 1.txt; sed '5,$'p -n 1.txt
打印包含某个字符串的行 sed -n '/root/'p 1.txt 可以使用 ^ . * $等特殊符号
-e 可以实现同时进行多个任务 sed -e '/root/p' -e '/body/p' -n 1.txt 也可以用;实现 sed '/root/p; /body/p' -n 1.txt
删除行 sed '/root/d' 1.txt; sed '1d' 1.txt; sed '1,10d' 1.txt
替换 sed '1,2s/ot/to/g' 1.txt, 其中s就是替换的意思,g为全局替换,否则只替换第一次的,/也可以为 #, @ 等
删除所有数字 sed 's/[0-9]//g' 1.txt
删除所有非数字 sed 's/[^0-9]//g' 1.txt
调换两个字符串位置 head -n2 1.txt |sed 's/(root)(.)(bash)/\3\2\1/'
直接修改文件内容 sed -i 's/ot/to/g' 1.txt
a 行后插入 i 行前插入
c 替换 d 删除 n跳过一行
sed '1.5a =====' file
sed '10c b' file
对第十行的c替换成b
在test.txt 20行到末行最前面加 'aaa:'
sed '20,$s/./aaa:&/' 1.txt
\u\l 对首字母大小写替换
\U\L对字符串大小写替换
\u& 小写变大写
\l& 大写变小写
sed 高级用法 前段时间在学习shell脚本,上次有提到sed的模式空间和保持空间概念,但是一直没有研究好,这两天研究了一下,所以将它发出来,不是很全面,仅仅供大家参考一下。 保持空间sed在正常情况下,将处理的行读入模式空间,脚本中的“sed command(sed命令)”就一条接着一条进行处理,直到脚本执行完毕。然后该行被输出,模式被清空;接着,在重复执行刚才的动作,文件中的新的一行被读入,直到文件处理完毕。 模式空间可以比喻为一个生产线,而保持空间则可以被比喻为仓库,这个比喻希望可以帮助大家理解两者的关系。 sed的指令中用来操作保持空间和模式空间的常见的有一下 为了方便,在下面用P来表示模式空间,M来表示保持空间 h:把模式空间里的内容复制到暂存缓冲区(保持空间) H:把模式空间里的内容追加到暂存缓冲区(保持空间) g:把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容 G:把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面 d: 删除pattern中的所有?行,并读入下一新行到P中 D:D 删除M ,P中的第一行,不读入下一行
x:交换保持空间和模式空间的内容 在多行模式下有三个新命令:”N”,”D”和”P”。我将介绍它们与”n”,”d”和”p”单行命令的关系。 “n”命令会打印当前模式空间(除非使用了-n选项),清空当前模式空间,从输入中读取下一行。”N”命令不打印不当模式空间,也不清空模式当间,它读取下一行,并将新行的字符追加到模式空间。 “d”命令会删除当前模式空间,并读取下一行,再将新行放入模式空间,并放弃当前操作,然后开始sed的第一个命令,即开始一次新的循环。”D”命令删除模式空间中的第一部分,直到新行的字符,而保留模式空间其余的部分。它像”d”一样,放弃当前操作并开始一个新的循环,但是它不会打印当前模式空间,你在前一步打印它,如果”D”命令在一个大括号里与其它命令一起执行,在”D”之后的命令会被忽略,然后另一组sed命令会被执行,除非模式空间已经空了。如果真是这样,那么循环会重新开始。 “p”命令会打印整个模式空间,”P”命令只打印模式空间的第一部分,直接新行的字符。