sed 'N;s/\n/ /g' 两行变一行
sed 'N;N;s/\n/ /g' 三行变一行
#高级编辑命令
h: 模式空间覆盖保持空间
H:模式空间追加保持空间
g:保持空间取出覆盖至模式空间
G:保持空间取出追加至模式空间
x: 模式空间互换保持空间
n: 读取匹配到的行的下一行至模式空间
N:读取匹配到的行和下一行至模式空间
d: 删除模式空间中的行
D:删除多行模式空间中的所有行
sed 'n;d' test.txt #显示奇数行
sed -n '1~2p' test.txt #显示奇数行
sed -n 'n;p' ip #显示偶数行
sed -n '2~2p' test.txt #显示偶数行
sed '1!G;h;$!d' test.txt #逆序显示文件内容
sed '$!d' fsta #取出文件最后一行
sed 'G' test.txt #每行追加空白行
sed '/^$/d;G' test.txt #每行追加空白行,多行空白行合并一个空白行
#普通参数
sed '/^#\|^$/d' fstab #删除#和空行
sed '1,8d' fstab #1-8行删除
sed '/^#/d' fstab----->sed -n '/^#/p' fstab #相反
sed '10a\"IP"' fstab #第10行后追加
sed '/^tmpfs/a\"IP"' fstab #tmpfs开头的行后增加
sed '/^tmpfs/a\Hello\nword' fstab #追加两行
sed '/^tmpfs/i\hello\nword' fstab #在行前面追加
sed '/^tmpfs/c\hello\nword' fstab #替换匹配到的行
sed '/^tmpfs/w b.txt' fstab #查找出来的行写到b.txt
sed '/^tmpfs/!d' fstab #除了tmpfs的行删除
sed 's/r..t/&er/g' /etc/passwd #所有r..t的字符串后面加er
sed 's/^[[:space:]]\+//' /boot/grub/grub.conf #删除每行空白字符开头的空白字符
echo "/etc/sysconfig" | sed 's#[^/]\+$##' #取出目录
sed引用变量
sed命令使用双引号的情况下,使用$var直接引用
$ echo|sed "s/^/$RANDOM.rmvb_/g"
sed命令使用单引号的情况下,使用'"$var"'引用,单引号加双引号
$ echo|sed 's/^/'"$RANDOM"'.rmvb_/g'
sed中执行外部命令
sed命令使用单引号的情况下使用'`shell command`'或者'$(shell command)'引用命令执行的结果
$ echo|sed 's/^/'`echo $RANDOM`'.rmvb_/g'
$ echo|sed 's/^/'$(echo $RANDOM)'.rmvb_/g'
$ echo|sed 's/^/'$(date +"%Y%m%d")'.rmvb_/g'
sed options script file
语法:
sed [options] '{command}[flags]' [filename]
-e script 将脚本中指定的命令添加到处理输入时执行的命令中 多条件,一行中要有多个操作
-f script 将文件中指定的命令添加到处理输入时执行的命令中
-n 抑制自动输出
-i 编辑文件内容,会破坏软硬链接,--follow-symlinks可以保留软链接
-i.bak 修改时同时创建.bak备份文件。
-r 使用扩展的正则表达式
! 取反 (跟在模式条件后与shell有所区别)
q 退出 w 另存
r filename读取文件 R 读取一行
保持前面匹配的内容 (与正则分组类似)
sed常用内部命令
a 在匹配后面添加
i 在匹配前面添加
p 打印
d 删除
s 查找替换
c 更改
y 转换 N D P
h H 拷贝/添加模式空间到内存缓冲区
g G 拷贝/添加内存缓冲区到模式空间
/s replace
echo "this is a test" |sed 's/test/text/'
sed 's/dog/cat'/ data1
sed -e 's/brown/green/;s/dog/cat/' data1
sed -n '1p' data1 #显示第一行
sed -n '$p' data1 #显示最后一行
sed -n '1,2p' data1 #显示第一行到第二行
sed -n '2,$p' data1 #显示第二行到最后一行
s/pattern/repleacement/flags
sed '1,3y/abc/ABC/' newfile
y命令就是将小写转换成了大写,正则表达式元字符不能使用这个命令
flags
数字 表示新文本替换的模式
g:表示用新文本替换现有文本的全部实例
p:表示打印原始的内容
w file:将替换的结果写入文件
sed '2{s/fox/elephant/;s/dog/cat/}' data1
sed '2,${s/fox/elephant/;s/dog/cat/}' data1
sed '1,10y/abcde/ABCDE/' example.file
把1—10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令。参数y,表示把一个字符翻译为另外的字符(但是不用于正则表达式)
modify file
sed -i
sed -i '/修改点/i增加内容' filename
sed -i '/修改点/d' filename
修改点可以是行号
可是字符串【唯一字符串】
增
sed -i '4iabc' data3 在第四行之前插入abc
sed -i '4aabc' data3 在第三行之后插入abc
sed -i '/abc/c789' data3 将abc改为789
删
sed -i '4d' data3
sed -i '/number 2/d' data3
改
将This is line number 2.改为 this is a test line number 2.
sed -i '/line number 2/cthis is test line number 2' data3
sed -n "$=" test 统计test有多少行
sed 在指定位置插入一行
正则表达式
元字符集^
锚定行的开始如:/^sed/匹配所有以sed开头的行。
$
锚定行的结束如:/sed$/匹配所有以sed结尾的行。
.
匹配一个非换行符的字符如:/s.d/匹配s后接一个任意字符,然后是d。
*
匹配零或多个字符如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[]
匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。
[^]
匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
\(..\)
保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
&
保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\<
锚定单词的开始,如:/\<love/匹配包含以love开头的单词的行。
\>
锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行。
x\{m\}
重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。
x\{m,\}
重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。
x\{m,n\}
重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行。