linux sed 个人常用的

一、sed

1. 替换每行第n(如果有的话)个匹配


        sed "s/regexpr/anyword/${n}" filename

cat filename
111111111111111111
222222222222222222
333333333333333333
444444444444444444
举例
sed "s/4/ 四 /8" filename
111111111111111111
222222222222222222
333333333333333333
4444444 四 4444444444

2.替换每行第一个匹配

[ - ]

CODE:

sed ‘s/regexpr/anyword/‘ filename
    sed ‘s/regexpr/anyword/1‘ filename

举例:

QUOTE:

cat filename
1234567890 2345678901
3456789012 4567890123
sed ‘s/5/五/‘ filename
1234五67890 2345678901
34五6789012 4567890123

3.行号处理

1> 为文件加行号

CODE:

sed = filename|sed ‘N;s/\n/:/‘
cat filename
111111111111111111
222222222222222222
333333333333333333
444444444444444444

举例

[ - ]

CODE:

sed = filename|sed ‘N;s/\n/:/‘ filename
1:111111111111111111
2:222222222222222222
3:333333333333333333
4:444444444444444444

2>仅为文件中的正文行加行号

[ - ]

CODE:

cat filename
111111111111111111

222222222222222222
333333333333333333

444444444444444444

sed /./= a|sed ‘/./N;s/\n/:/‘ filename
1:111111111111111111

3:222222222222222222
4:333333333333333333

6:444444444444444444

            3>.字串翻转

[ - ]

CODE:

echo 1234567890|sed ‘/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//‘
0987654321

#########################################################

#########################################################

四.选择性输出


1.打印文档奇数行(隔行输出)

[ - ]

CODE:

sed ‘n;d‘
sed ‘x;$!N;x‘
sed -n ‘p;n‘

1
3
5
7

2.打印偶数行(隔行输出)

[ - ]

CODE:

sed -n ‘n;p‘
sed ‘1d;n;d;‘
2
4
6
8

3.删除连续重复行(大量使用了pattern space 文件太大时要注意)

[ - ]

CODE:

sed ‘$!N; /^\(.*\)\n\1$/!P; D‘     
#使用 $!N 要当心内存溢出

举例

[ - ]

CODE:

cat file
111111111111111111
222222222222222222
222222222222222222
333333333333333333
444444444444444444
444444444444444444
444444444444444444
444444444444444444
444444444444444444

sed ‘$!N; /^\(.*\)\n\1$/!P; D‘ filename
111111111111111111
222222222222222222
333333333333333333
444444444444444444

4.合并上下行并以空格相分隔

[ - ]

CODE:

cat file
1234567890
0987654321
执行命令后
1234567890 0987654321

5.将以\符号结尾的行与下行合并并以空格分隔(拼接断行)

[ - ]

CODE:

cat filename
1 111111111111111111\
2 222222222222222222
3 333333333333333333\
4 444444444444444444

sed -e :a -e ‘/\\$/N; s/\\\n/ /; ta‘ filename
1 111111111111111111 2 222222222222222222
3 333333333333333333 4 444444444444444444

6.按关键字拼接行
  如果某行以=开始,则合并到上一行并替代=为空格

[ - ]

CODE:

cat file
111111111111111111
222222222222222222 
=333333333333333333
444444444444444444

sed -e :a -e ‘$!N;s/\n=/ /;ta‘ -e ‘P;D‘ filename
111111111111111111
222222222222222222 333333333333333333
444444444444444444

7.输出匹配行的下一行

[ - ]

CODE:

cat filename
1 111111111111111111
2 222222222222222222
3 333333333333333333
4 444444444444444444

sed -n ‘/^3/{n;p;}‘ filename
4 444444444444444444

8.显示匹配行的行号并输出匹配行的上行、匹配行、下行

sed -n -e ‘/regexpr/{=;x;1!p;g;$!N;p;D;}‘ -e h
举例

[ - ]

CODE:

cat filename
1 111111111111111111
2 222222222222222222
3 333333333333333333
4 444444444444444444

sed -n -e ‘/^3/{=;x;1!p;g;$!N;p;D;}‘ -e h  filename
3                                       #匹配行的行号
2 222222222222222222  #上一行
3 333333333333333333  #匹配行
4 444444444444444444  #下一行

9.删除文档中某标志区域内的关键字匹配行

删除文档中从being开到end结束的块中包含myword的行

[ - ]

CODE:

sed ‘/^begin/,/^end/{/myword/d;}‘ filename

QUOTE:

cat filename
myword
begin
myword
Number!
myword
Number!
myword
Number!
myword
Number!
end
myword
Number!

测试

QUOTE:

myword
begin
Number!
Number!
Number!
Number!
end
myword
Number!

五.字串解析

1.从字串中解析出两个子串(前2各字符和后9个字符)

[ - ]

CODE:

echo "WeLoveChinaUnix"|sed -e ‘H;s/\(..\).*/\1/;x;s/.*\(.\{9\}\)$/\1/;x;G;s/\n/ /‘
We ChinaUnix

2.分解日期串

[ - ]

CODE:

echo 20030922|sed ‘s/\(....\)\(..\)\(..\)/\1 \2 \3/‘|read year month day
echo $year $month $day
2003 09 22

######################################################################################

########################################################################################

cat file
1 192.148.99.253 [17/Jun/2003:11:25:44 /sc 
2 192.148.99.253 [17/Jun/2003:11:18:21 /si 
1 192.148.99.253 [17/Jun/2003:11:20:34 /sp 
2 192.148.99.253 [17/Jun/2003:11:18:13 /ap 
1 192.148.99.253 [17/Jun/2003:11:17:30 /hou/ 
1 192.93.108.187 [17/Jun/2003:14:49:14 /sc 
3 192.93.108.187 [17/Jun/2003:14:39:11 /si 
5 192.68.82.78   [05/Jun/2003:00:05:45 /hou/ 
9 192.68.82.78   [05/Jun/2003:00:05:45 /ss 
4 192.228.210.10 [16/Jun/2003:09:29:30 /hou/

d=6
取文件的第六行,则
单引号

[ - ]

CODE:

sed -n ‘‘"$d"‘/p‘  file
1 192.93.108.187 [17/Jun/2003:14:49:14 /sc

双引号

[ - ]

CODE:

sed -n "$d"p file  or  sed -n "${d}p" file
1 192.93.108.187 [17/Jun/2003:14:49:14 /sc

结果完全相同。
又:
取文件的第1到第6行,则:
单引号:

[ - ]

CODE:

sed -n ‘1,‘"$d"‘p‘ file
1 192.148.99.253 [17/Jun/2003:11:25:44 /sc
2 192.148.99.253 [17/Jun/2003:11:18:21 /si
1 192.148.99.253 [17/Jun/2003:11:20:34 /sp
2 192.148.99.253 [17/Jun/2003:11:18:13 /ap
1 192.148.99.253 [17/Jun/2003:11:17:30 /hou/
1 192.93.108.187 [17/Jun/2003:14:49:14 /sc

时间: 2024-10-12 10:14:59

linux sed 个人常用的的相关文章

linux sed常用用法总结

sed是linux中比较常用的文本编辑类命令,规则为逐行输出 其比较常用的用法如下: sed [OPTION] {SCRIPT} FILENAME 主要[OPTION]: -n:不再显示默认模式空间中的内容 -i:修改源文件 -e:同时执行多个操作 例如:sed -e {SCRIPT} -e {SCRIPT} ... -f:指定脚本文件处理文本内容 例如:sed -f SCRIPTNAME FILENAME -r:允许使用扩展的正则表达式(同grep -e 或者 egrep) {SCRIPT}可

Linux运维常用知识(4)

linux命令无效-bash: ls: command not found 一次重启后开机,基本所有的命令都不可用,只有少数的命令可用 [[email protected] ~]# ll -bash: ls: command not found [[email protected] ~]# pwd /root [[email protected] ~]# shutdown -r now -bash: shutdown: command not found [[email protected] ~

Linux sed命令小结

1.什么是sed sed,流编辑器,即stream editor.它可以将文本文件的每一行读取到内存,即所谓sed的模式空间,在这个模式空间中可以进行编辑并输出. 2.sed的使用格式 sed [options] "AdressCommand" file1,file2,... 说明: a.Adress实际上是用来确定编辑文件的范围,可以是精确的某一行,也可以是从某一行到某一行,也   可以用正则进行过滤匹配. b.Command表示将符合Address的行进行XXX操作.注意默认情况下

linux上的常用的系统自带命令

wikipedia 发现的分类,发现还有好多没用过.. Unix command-line interface programs and shell builtins   File system cat cd chmod chown chgrp cksum cmp cp dd du df file fsck fuser ln ls mkdir mount mv pax pwd rm rmdir size split tee touch type umask   Processes at bg c

【Linux基础】常用命令大全

Linux基础之常用命令大全 系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpuinfo 显示CPU info的信息 cat /proc/interrupts 显示中断 cat /

Linux文本处理常用命令

1.正则表达式 (1)正则表达式一般用来描述文本模式的特殊用法,由普通字符(例如字符a-z)以及特殊字符(称为元字符,如/.*.?等)组成.  (2)基本元字符集及其含义      ^ :只匹配行首.   如^a 匹配以a开头的行abc,a2e,a12,aaa,......      $ :只匹配行尾.   如^a 匹配以a结尾的行bca,12a,aaa,.......      * :匹配0个或多个此单字符. 如(a)* 匹配 空,a,aa,aaa,....      [] :只匹配[]内字符

Linux后台开发常用工具

https://files-cdn.cnblogs.com/files/aquester/Linux后台开发常用工具.pdf 目录 目录 1 1. 前言 3 2. 脚本类工具 3 2.1. sed命令-字符串文本操作 3 2.2. sed和awk使用外部变量 4 2.3. awk给外部变量赋值 4 3. 设备类工具 5 3.1. 查看网卡型号 5 3.2. dmidecode查看所有硬件信息工具 5 3.3. lscpu查看cpu工具 5 3.4. lspci查看主板工具 5 3.5. lssc

Linux运维常用命令

Linux运维常用的150个命令 命令 功能说明 线上查询及帮助命令(2个) man 查看命令帮助,命令的词典,更复杂的还有info,但不常用. help 查看Linux内置命令的帮助,比如cd命令. 文件和目录操作命令(18个) ls 全拼list,功能是列出目录的内容及其内容属性信息. cd 全拼change directory,功能是从当前工作目录切换到指定的工作目录. cp 全拼copy,其功能为复制文件或目录. find 查找的意思,用于查找目录及目录下的文件. mkdir 全拼mak

linux sed 批量替换多个文件中的字符串

转载:http://blog.csdn.net/kauu/article/details/1757325 一.linux sed 批量替换多个文件中的字符串 sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir` 例如:替换/home下所有文件中的www.bcak.com.cn为bcak.com.cn sed -i "s/www.bcak.com.cn/bcak.com.cn/g" `grep ww