shell 编程之sed 追加文件内容 、修改文件内容、删除文件内容

处理工具:grep sed awk

常用元字符
\ 转义字符。例如:“\!”将逻辑否的!看做普通字符
^ 匹配字符串开始的位置,以…为开头的
$ 匹配字符串结束的位置,以…结束的
. 匹配任意一个字符

  • 匹配前面子表达式0词或多次
    [list] 匹配list列表中的一个字符,例如:[abc] 、 [a-z] 、 [a-z0-9]
    [^list] 匹配任意不再list表中的一个字符;例如: [^a-z] 、 [^0-9]、 [^A-Z0-9]
    {n} 匹配前面子表达式n次
    {n,} 匹配前面子表达式至少n次
    {n,m} 匹配前面子表达式最少n次,最大m次

常见的转义字符
shell 编程之sed 追加文件内容 、修改文件内容、删除文件内容_第1张图片
sed命令 格式:sed ‘编辑命令’ 文件1 文件2
常用:-e 指定要执行的命令,只有一个编辑命令时可省略
-n 只输出处理后的行,读入时不显示,不对原文件进行修改
-i 直接编辑原文件,不输出结果

编辑命令格式: /[地址1[,地址2]/操作 ] [参数]
地址:可为行数、正则表达式、$,没有地址代表全文
操作: p 打印(输出)
d 删除(整行)
s 替换(字符串)
c 替换(整行)
r 读取指定文件(到行后)
a append,追加指定内容到行后
i insert , 追加指定内容到行前
w 另存为
n 表示读入下以行内容
H 复制到剪贴板
g 将剪贴板中的内容覆盖到指定行
G 将剪贴板中的内容追加到指定行后

例如:nl l.txt
sed -n ‘10p’ l.txt //输出第10行内容
sed -n ‘2,6p’ l.txt //输出3~6行的内容
cat -n l.txt

例如:sed “p” l.txt 打印
sed -n ‘/hello/p’ l.txt

追加用法总结:

	1、a					在匹配行后面追加		
	2、i					在匹配行前面追加
	3、r					将文件内容追加到匹配行后面
	4、w					将匹配行写入指定文件
	
追加用法示例详解:

	1、a	append
	
		(1)、passwd文件第10行后面追加"Add Line Behind"		
			sed -i '10a Add Line Begind' passwd
		(2)、passwd文件第10行到第20行,每一行后面都追加"Test Line Behind"
			sed -i '10,20a Test Line Behind' passwd
		(3)、passwd文件匹配到/bin/bash的行后面追加"Insert Line For /bin/bash Behind"
			sed -i '/\/bin\/bash/a Insert Line For /bin/bash Behind' passwd
	
	2、i
	
		(1)、passwd文件匹配到以yarn开头的行,在匹配航前面追加"Add Line Before"
			sed -i '/^yarn/i Add Line Before' passwd
        (2)、passwd文件每一行前面都追加"Insert Line Before Every Line"
			sed -i 'i Insert Line Before Every Line' passwd
		
	3、r
	
		(1)、将/etc/fstab文件的内容追加到passwd文件的第20行后面
			sed -i '20r /etc/fstab' passwd
        (2)、将/etc/inittab文件内容追加到passwd文件匹配/bin/bash行的后面
			sed -i '/\/bin\/bash/r /etc/inittab' passwd
        (3)、将/etc/vconsole.conf文件内容追加到passwd文件中特定行后面,匹配以ftp开头的行,到第18行的所有行
			sed -i '//,18r /etc/vconsole.conf' passwd
		
	4、w
	
		(1)、将passwd文件匹配到/bin/bash的行追加到/tmp/sed.txt文件中
			sed -i '/\/bin\/bash/w /tmp/sed.txt' passwd
        (2)、将passwd文件从第10行开始,到匹配到hdfs开头的所有行内容追加到/tmp/sed-1.txt
			sed -i '10,/^hdfs/w /tmp/sed-1.txt' passwd
			
			
总结:

	修改用法总结:
	
		1、1s/old/new/
		2、5,10s/old/new/
		3、10,+10s/old/new/
		4、/pattern1/s/old/new/
		5、/pattern1/,/pattern2/s/old/new/
		6、/pattern1/,20s/old/new/
		7、15,/pattern1/s/old/new/
		
	练习例子:
	
		1、修改/etc/passwd中第1行中第1个root为ROOT	
			sed -i '1s/root/ROOT/' passwd
		2、修改/etc/passwd中第5行到第10行中所有的/sbin/nologin为/bin/bash
			sed -i '5,10s/\/sbin\/nologin/\/bin\/bash/g' passwd
		3、修改/etc/passwd中匹配到/sbin/nologin的行,将匹配到行中的login改为大写的LOGIN
			sed -i '/\/sbin\/nologin/s/login/LOGIN/g' passwd
		4、修改/etc/passwd中从匹配到以root开头的行,到匹配到行中包含mail的所有行。修改内为将这些所有匹配到的行中的bin改为HADOOP
			sed -i '/^root/,/mail/s/bin/HADOOP/g' passwd
		5、修改/etc/passwd中从匹配到以root开头的行,到第15行中的所有行,修改内容为将这些行中的nologin修改为SPARK
			sed -i '/^root/,15s/nologin/SPARK/g' passwd
		6、修改/etc/passwd中从第15行开始,到匹配到以yarn开头的所有行,修改内容为将这些行中的bin换位BIN
			sed -i '15,/^yarn/s/bin/BIN/g' passwd
		

	
		

总结:

	用法总结:
	
		1、1d
		2、5,10d
		3、10,+10d
		4、/pattern1/d
		5、/pattern1/,/pattern2/d
		6、/pattern1/,20d
		7、15,/pattern1/d
		
	练习例子:
	
		1、删除/etc/passwd中的第15行	
			sed -i '15d' /etc/passwd
		2、删除/etc/passwd中的第8行到第14行的所有内容	
			sed -i '8,14d' passwd
		3、删除/etc/passwd中的不能登录的用户(筛选条件:/sbin/nologin)	
			sed -i '/\/sbin\/nologin/d' passwd
		4、删除/etc/passwd中以mail开头的行,到以yarn开头的行的所有内容		
			sed -i '/^mail/,/^yarn/d' passwd
		5、删除/etc/passwd中第一个不能登录的用户,到第13行的所有内容
			sed -i '/\/sbin\/nologin/,13d' passwd
		6、删除/etc/passwd中第5行到以ftp开头的所有行的内容
			sed -i '5,/^ftp/d' passwd
		7、删除/etc/passwd中以yarn开头的行到最后行的所有内容	
			sed -i '/^yarn/,$d' passwd
											

	典型需求:
	
		1、删除配置文件中的所有注释行和空行
			sed -i '/[:blank:]*#/d;/^$/d' nginx.conf
		2、在配置文件中所有不以#开头的行前面添加*符号,注意:以#开头的行不添加
			sed -i 's/^[^#]/\*&/g' nginx.conf

你可能感兴趣的:(shell 编程之sed 追加文件内容 、修改文件内容、删除文件内容)