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的行。

results matching ""

    No results matching ""