sed命令是对文本内容进行增删改查,生效才会存入硬盘中,不然会存在缓冲区
sed -i————————生效,生成在文本文件当中
sed—————————临时模式,不会对文本内容发生变化,就在模式空间,用户读取之后结束
主要包括读取,执行和显示三个过程
(1)读取:标准输入)中读取一行内容并存储到临时的缓冲区中 (又称模式空间,pattern spacesed)。
(2)执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed 命令 将会在所有的行上依次执行
(3)显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行。
在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。
注意:默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会发生任何变化,除非是用重定向存储输出。
(1)sed -e ’操作‘ 文件1 文件2…
(2)sedsed -n-e ’操作‘ 文件1 文件2…
(3)sed -f 脚本文件 文件1 文件2…
(4)sed -i -e ’操作‘ 文件1 文件2…
-e或-expression=: |
---|
-f 或–file=:表示用指定的脚本文件来处理输入的文本文件。 |
-h 或–help:显示帮助。 |
-i 直接修改目标文本文件 慎用 |
-n 仅显示script处理后的结果 |
常用选项 |
---|
s:替换,替换指定字符。 |
d:删除,删除选定的行。 |
a:增加,在当前行下面增加一行指定内容。 |
i:插入,在选定行上面插入一行指定内容。 |
c:替换,将选定行替换为指定内容。 |
y:字符转换,转换前后的字符长度必须相同。 |
p:打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,常和“-n”一起使用。 |
sed “ ” 要打印的文件名
sed '' /etc/fstab #查看文件内容
sed '' < /etc/fstab #可以支持重定向输入
cat /etc/passwd |sed '' #也可以支持管道符
例:
sed " " 123.txt #打印123.txt的内容
格式:sed -e ‘p’ 文件名
sed -n ‘p’ 文件名
sed -e 'p' 123.txt #默认打印文件内容
sed -n 'p' 123.txt #过滤默认输出的重复一次只显示当前操作符打印出来的结果
格式:sed -n ‘np’ 文件名
例:
sed -n '2p' 123.txt #指定当前文件第二行打印
格式:sed -n ‘=’ 文件名
例:
sed -n '=' 123.txt #打印出123.txt文件里有多少行
格式:sed -n ‘=;p’ 文件名
例:
sed -n '=;p' 123.txt #即打印出123.txt文件的行号也打印内容
格式:sed -n ‘=;np’ 文件内容
例:
sed -n '=;3p' 123.txt #即显示第三行和第三行的内容
格式:sed -n ‘$p’ 文件名
例:
sed -n '$p' 123.txt #指定打印123.txt的最后一行
格式:sed -n ‘n,np’ 文件名
例:
(1)指定行到行打印
sed -n '1,3p' 123.txt #指定123.txt文件的1-3行打印
(2)指定第几行到最后一行打印
格式:sed -n ‘n,$p’ 123.txt
例:
sed -n '5,$p' 123.txt #指定第五行到最后一行的内容
(3)打印第几行和最后一行
格式:sed -n ‘np;$p’ 文件名
例:
sed -n '5p;$p' 123.txt #指定打印第五行和最后一行
(4)打印第几行和第几行
格式:sed -n ‘np;np’ 文件名
例:
sed -n '2p;6p' 123.txt #指定打印第二行和第六行
(5)指定打印第几行往下几行
格式:sed -n ‘n,+np’ 文件名
例:
sed -n '2,+2p' 123.txt #指定打印第二行和第二行的后两行
(6)指定打印第几行到往下第几行
格式:sed -n ‘n,+np’ 文件名
例:
sed -n '2,4p' 123.txt #指定打印第2行到往下第4行
(1)打印出文件的奇数行
sed -n 'p;n' jishu.txt
(2)打印出文件的偶数行
sed -n 'p;n' oushu.txt
(3)即打印行号也打印出偶数行
sed -n '=;p;n' oushu.txt
格式:sed -n ‘/想要打印所包含行的字符串/p’ 文件名
例:
sed -n '/w/p' zfc.txt #打印所有包含w的行
sed -n '/btr/p' zfc.txt #打印btr这行
格式:sed -n ‘/^打印的字符串/p’ 文件名
例:
sed -n '/^root/p' /etc/passwd #打印以root为开头的行
格式:sed -n ‘/打印的字符串$/p’ 文件名
例:
sed -n '/bash$/p' /etc/passwd #打印以bash为结尾的行
格式:sed -n ‘/打印的字符串$/p’ 文件名
例:
sed -n '40,/bash$/p' /etc/passwd #从第40行开始打印到第一个bash结尾结束
sed -r 支持扩展正则表达式。同时在 使用{n}、{n,}、{n,m}时,括号{}前不需要加反斜杠\ 。
例:
sed -r -n '/(99:){2,}/p' /etc/passwd #包含有两个99:的内容所在行
sed -r -n '/^root|bash$/p' /etc/passwd #包换以root开头,或者以bsah结尾的内容所在行
sed -i 时会对文本进行实际操作(建议对目标文件先进行备份,再进行操作)
格式:sed ‘d’ 文件内容
例:
sed 'd' 123.txt #删除123.txt文件的所有内容,什么也不打印
格式:sed -n ‘nd;p’ 文件名
例:
sed -n '3d;p' 123.txt #删除第三行,打印剩余的所有内容
格式:sed -n ‘n,nd;p’ 文件名
例:
sed -n '5,8d;p' 123.txt #删除5到8行,打印剩余的所有内容
格式:sed -n ‘n,$d;p’ 文件名
例:
sed -n '5,$d;p' 123.txt #删除5到最后一行,打印剩余的所有内容
格式:sed -n ‘n,n!d;p’ 文件名
例:
sed -n '4,6!d;p' 123.txt #除了4-6行,其他的全部删除
格式:sed ‘/删除的字符串/d’ 文件名
例:
sed '/one/d' 123.txt #删除包含one的行
格式:sed ‘/保留的第一个字符串/,/保留的第二个字符串/!d’ 文件名
例:
sed '/one/,/six/!d' 123.txt #除了one-six的行,其余的全部删除,反向删除
格式:sed ‘/保留的行/!d’ 文件名
例:
sed '/six/!d' 123.txt #除了six的行,其余的全部删除,反向删除
格式:sed ‘/^$/d’ 文件名
例:
sed '/^$/d' test1.txt #通过^$,来删除空行
(1)s:替换字符串
(2)c:整行替换
(3)y:字符替换,替换前后的字符串长度必须相同
(1)数字:表明新字符串将替换第几处匹配的地方
(2)g:表面新字符串将会替换所有匹配的地方
(3)p:打印与替换命令匹配的行,与-n一起使用
(4)w文件:将替换的结果写入文件中
格式:sed -n ‘s/要替换的字符串/替换后的字符串/np’ 文件名
例:
sed -n 's/root/test/p' /etc/passwd #指定第一个root,替换为test
sed -n 's/root/test/2p' /etc/passwd #指定第二个root,替换为了test
格式:sed -n ‘s/要替换的字符串/替换后的字符串/gp’ 文件名
例:
sed -n 's/root/test/gp' /etc/passwd #所有的root都替换为test
格式:sed -n '/^以什么为开头的字符串/ s/^/#/p’文件名
例:
sed -n '/^root/ s/^/#/p' /etc/passwd
格式:sed -n '/ s/^/#/p’文件名
例:
sed -n 's/^/#/p' /etc/passwd
sed 's/[a-z]/\U&/g' test.txt
sed -i 's/[A-Z]/\l&/g' test.txt
sed -i 's/[a-z]/\u&/' test.txt
格式:sed ‘/想要替换的内容/c 替换后的内容’ 文件名
例:
sed '/Qwer/c oneone' test.txt #将test.txt中的Qwer替换为oneone
使用y,是对单个字符进行替换,每个字符需要一一对应,不是整体替换。前后字符串长度需要一致,不然会报错
只要有匹配的单字符会全部替换
格式:sed ‘y/想要替换的单字符/替换过后的单字符/’ 文件名
例:
sed 'y/a/2/' test.txt #将a替换为2
a:在下一行添加内容
格式:sed ‘/添加的行/a 添加的内容’ 文件名
例:
sed '/three/a 123' test.txt #在test.txt文件的three行的下一行添加123
格式:sed ‘$a 添加的内容’ 文件名
例:
sed '$a 123' test.txt #在test.txt文件的最后一行添加
i:在上一行插入内容
格式:sed ‘/添加的行/i 添加的内容’ 文件名
例:
sed '/three/i 123' test.txt #在test.txt文件的three行的上一行添加123
格式:sed ‘$i 添加的内容’ 文件名
例:
sed '$i 123' test.txt #在test.txt的文件最后后面的行中插入123
r:在行后读入文件内容
格式:sed ‘/指定的行/r 需要读取的文件’ 需要添加的文件名
例:
sed '/three/r 123.txt' test.txt #指定three行的下一行添加读取的内容
格式:sed ‘/$r 读取的文件’ 需要添加的文件名
例:
sed '$r 123.txt' test.txt #先读取123.txt内容,然后再到test.txt的末行插入读取的所有内容
echo bbxx | sed -r 's/(bb)(xx)/\2\1/'
echo zzjjff | sed -r 's/(zz)(jj)(ff)/\3\1\2/'
echo 你喜欢我 | sed -r 's/(.)(.)(.)(.)/\4\3\2\1/'
sed -f 123.txt 456.txt #将第二个文件内容替换为第一个文件内容
sed -f test1.txt test2.txt
使用split命令进行文件分割(按行分割)
(1)sed -i ‘d’ 文件名
(2)cat /dev/null > 文件名
(1)grep -v “^$” 文件名———————过滤出非空行
(2)cat 文件名 | tr -s ”\n"——————压缩换行符
(3)sed ‘/^$/d’ 文件名————————删除空行
cat /etc/sysconfig/network-scripts/ifcfg-ens33 | sed '/^IPADDR/c IPADDR=10.10.10.10'
cat bbh.txt | sed -r 's/(.*)-(.*)(\.jar)/\2/'
cat /var/log/messages | sed -n '/18:29:45/,/18:50:01 /p'
添加日期时间内的日志文件
cat /var/log/messages | sed -n '/Jun 6 18:40:01/,/Jun 6 18:50:01 /p'