sed修改文本命令

文本处理命令

sort命令

	sort是排序的命令,默认使用第一个字符进行排序

	-n # 依照数值的大小排序
	
		[root@localhost ~]# cat 1.txt | sort -n
	
	-r # 以相反的顺序来排序
	
		[root@localhost ~]# cat 1.txt | sort -n -r
		
	-k # 以某列进行排序(默认的分隔符是空格)
	
		[root@localhost ~]# cat 2.txt | sort -n -k2
	
	-t # 指定分割符,默认是以空格为分隔符
	
		[root@localhost ~]# cat 3.txt | sort -n -k2 -t:

uniq 命令

(去重,默认只去重相邻的数据)
    一般与 sort 命令结合使用

	[root@localhost ~]# cat 1.txt | sort -n | uniq

	-c # 在每列旁边显示该行重复出现的次数。
	
		[root@localhost ~]# cat 1.txt | sort -n | uniq  -c
	
	-d # 仅显示重复出现的行列。
	
		[root@localhost ~]# cat 1.txt | sort -n | uniq  -c -d
	
	-u # 仅显示出一次的行列。
		
		[root@localhost ~]# cat 1.txt | sort -n | uniq  -c -u

cut 命令(分割字符)

	cut命令用来显示行中的指定部分,删除文件中指定字段。

	-d # 指定字段的分隔符,默认的字段分隔符为"TAB";
	
		[root@localhost ~]# cut -d: -f1 3.txt

	-f # 显示指定字段的内容
	
		[root@localhost ~]# cut -d: -f3 /etc/passwd

tr命令(替换字符)

	[root@localhost ~]# cat 3.txt | tr "123" "abc"

	-d # 删除字符
		[root@localhost ~]# cat 3.txt | tr -d "456"

wc命令(统计字符)

	-c # 统计文件的Bytes数
		[root@localhost ~]# cat 3.txt | wc -c
		
	-l # 统计文件的行数
		[root@localhost ~]# cat 3.txt | wc -l
	
	-w # 统计文件中单词的个数,默认以空白字符做为分隔符
		[root@localhost ~]# cat 3.txt | wc -w
		
	**注**: 在Linux系统中,一般连续的数字或字母组合为一个词。

sed 命令

sed (流式编辑器): sed 主要用来修改文件

格式

sed [参数] "[定位][指令]" 处理的文本路径
    注 : 不指定定位, 则默认处理全文
    
    命令版本信息:
        sed --version

参数

  -e  :  允许多项编辑
 -n  :  取消默认输出
 -i  :  就地编辑文本
 -r  :  支持扩展正则表达式(sed中的正则表达式必须放在两个//中间)
 -f  :  指定定位规则的文件
练习
    1. 要求将/etc/passwd文件复制到/root/1.txt中,然后删除当中包含/sbin/nologin的行
    cat /etc/passed  > 4.txt
        sed -i -r "/\/sbin\/nologin/d" 4.txt
        cat 4.txt
        
        
    2. 将/etc/nginx/nginx.conf文件中所有注释的行(以#开头的行)全部删除
        sed -i -r "/^ *#/d" /etc/nginx/nginx.conf

sed + 正则表达式(定位)

1、 数字
        固定定位
            sed -n '2p' 2.txt
        范围定位
            sed -n '1,3p' 2.txt

2、 正则
        正则表达式必须放在//之间
案例
    1. 打印/etc/passwd文件中包含root的行
        sed -n "/root/p" /etc/passwd
        
    2. 将包含空格的行打印出来
        sed -n -r "/ +/p" /etc/passwd
3、 数字加正则
        正则匹配是非贪婪性的匹配
            贪婪性是匹配到之后,不停继续匹配,直至文件所有的内容全部匹配完毕
            
            非贪婪性匹配,一旦匹配到就停止匹配
案例
    1. 在/etc/passwd文件中的第一行,到包含
    test的行,全部删除
        sed -r "1,/test/d" /etc/passwd
        
    2. 删除从包含root的行到第5行的内容
        sed -r "/root/,5d" /etc/passwd
        
    3. 从包含root的行删除到包含ftp的行
        sed -r "root/,/ftp/d" /etc/passwd
4、 \c 与 c 分隔符
        \c 与 c 只是一个代表,其中c可以替换成任意一个字符
            
    ```
    sed -i -r "\#/sbin/nologin#d" 4.txt
    sed -i -r "\A/sbin/nologinAd" 4.txt
    ```
常用指令
p   :  打印文本    (与-n一起使用)
d   :  删除文本
a   :  在当前行后添加一行或多行内容
c   :  用新文本修改(替换)当前行中的文本
i   :  在当前行之前插入文本     (删除文件sed -i.bak; -i参数必须写在所有参数最后面)
r   :  从以外文件中读相关内容,写到相关行之后
w   :  匹配到的行写入一个新的文件之中
y   :  将字符替换成一个新的字符     (替换文本中相同的字符)
s   :  用一个字符整体替换成另外一个字符
       (一行只能替换最前面的字符)
        s 指令替换对于行来说,是非贪婪性,如果需要全局替换则需使用g 指令
g   :  全局执行
i   :  与 s 指令配合一起使用时,则是忽略大小写的作用
案例
   1. 在文本中,打印第一行和第五行
       sed -e '5p' -e "1p" 1.txt
   
   2. 在文本中,要求只打印第1,5,6三行
       sed -n -e '5p' -e "1p" -e "6p" 1.txt
       
   3. 要求删除文件的第3行
       sed -i '3d' 1.txt
   
   4. 删除/etc/fstab文件中所有注释的行
       sed -i -r "/^ *#|^$/d" /etc/fstab
       
   5. 删除1.txt的3行,打印第4行
       sed -f 3.txt 1.txt
       查看
       cat 3.txt
案例:
a   : 在当前行后添加一行或多行
    sed "2a xxxx" 4.txt
    
c   : 用新文本修改替换当前行中的文本
    sed "3c fkahfkd" 4.txt
    
i   : 在当前行之前插入文本
    sed "3i hdajagd" 4.txt
练习:在/etc/passwd 文件中,1至3行之前插入HelloWorld
    sed "1,3i HelloWorld" /etc/passwd
    
r   : 从以外文件中读相关内容,写到相关行之后
    sed "1,3r 5.txt" /etc/passwd
    
w   : 匹配到的行写入一个新的文件中
    sed "1,5w 6.txt" /etc/passwd
    
y   : 将字符替换成一个新的字符(替换文本中相同的字符)
    sed "1,5y/sbin/1234/" /etc/passwd
        sbin ---> 1234
        s   ---> 1
        b   ---> 2
        i   ---> 3
        n   ---> 4
        
s   : 用一个字符整体替换成另外一个字符
    sed "s/sbin/1234/" /etc/passwd
    
g   : 全局执行
    sed "s/root/1234/g" /etc/passwd
    
i   : 与s 指令配合使用,忽略大小写
    sed "s/ROOT/1234/i" /etc/passwd
练习
    1. 替换/etc/passwd 中的root为ROOT
        sed "s/root/ROOT/g" /etc/passwd
        
    2. 将模板机(192.168.15.200)中的ip替换成192.168.15.50
        sed "s/\.200/\.50/g" /etc/sysconfig/network-scripts/ifcfg-eth[01]
        ifconfig eth0|sed -n '2s#^ .*addr:##gp'
    
    3. 删除/etc/passwd中所有偶数行
        sed "1~2d" /etc/passwd
        
    4. 在每一行的行首增加#号
        sed "s/^ */#/g" 5.txt
        
    5. 将Hello World 替换成World Hello
        sed -r "s/(Hello) (World)/\2 \1/g" 6.txt
        
    6. 将1.txt中的每一行都添加一个.bak的后缀
        sed -r "s/(.*)/\1\.bak/g" 1.txt
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值