第4节:shell中sed和gawk的使用

1,命令介绍

  • sed:流编辑器
    • s:在文本中查找替换;
    • e:在文件中查找替换;
    • f:查找替换命令存储在脚本中

2,实例说明

#!/bin/bash

#sed编译器指定的命令应用于STDDIN输入流,STDOUT输出流
#这就允许将数据直接管道传送给sed编译器处理
#s:查找替换; /old/new/:new替换old 但只替换各行中的首个字符
echo "This is a test" | sed 's/test/big test/'     	
echo "This is a test" | sed 's/test/big test/' 1> hello


#在文件hello中进行查找替换    -e:多条命令进行查找替换  
#查找替换后输出到STDOUT;对hello文件不进行更改
cat hello
sed -e 's/test/normal/; s/big/samll/' hello	                                    
cat hello                                          	


#gawk:程序有'{}'定义  使用print命令:打印信息
#gawk:默认等待从STDIN输入 然后从从STDOUT输出 ctrl+D结束gawk程序
echo "This is a test" | gawk '{print "hello zzy"}' 	             		   	
echo "This is a test" | gawk '{print "hello pff"}' 1> hello


#gawk:$0:整行文本;$1:第一个数据段;$2:第二个数据段;$n:第n个数据段		
#从data3读取输入,$1:取每行的第一个数据段				   
cat data3					   	
echo "---------------------- \$0 ------------------"
gawk '{print $0}' data3
echo "---------------------- \$1 ------------------"
gawk '{print $1}' data3				   
echo "---------------------- \$4 ------------------"
gawk '{print $4}' data3

#-F:指定分隔符 指定‘:’为分隔符
#gawk -F: '{print $1}' /etc/passwd		   	
#使用多个命令,把$4替换成“zzy”然后打印整个文本
echo "my name is dave" | gawk '{$4="zzy"; print $0}'	
#BEGIN:强制执行脚本
gawk 'BEGIN {print "hello world"}'			

echo "test is not a test" | sed 's/test/noraml/2'	     #数字:替换第二个test
echo "test is not a test" | sed 's/test/noraml/g'        #g:  全部替换
#sed 's!/bin/bash!/bin/csh!' /etc/passwd                 #替换字符

cat data3
echo "-----------------替换第2行---------------------"
sed '{2s/is/are/}' data3			        #第2行进行替换
echo "-----------------替换第2,3行-------------------"
sed '{2,3s/is/are/}' data3			        #第2,3行替换
echo "-----------------替换第2,$行-------------------"
sed '{2,$s/is/are/}' data3				    #第2,最后行替换

echo "-----------------查找替换----------------------"
sed '{/one/s/is/are/}' data3				#包含“one”的行进行替换

echo "-----------------多个命令使用------------------"
sed '2,${s/is/are/ ;s/the/The/}' data3	    #使用多个命令

echo "-----------------删除所有行--------------------"
sed 'd' data3					            #删除所有行
echo ""
echo "-----------------删除第3行---------------------"
sed '3d' data3						       #删除第3行
echo "-----------------删除第2行到最后----------------"
sed '2,$d' data3					       #删除第2行到最后
echo "-----------------所有行前插入-------------------"
sed 'i hello world' data3
echo "-----------------第3行前插入--------------------"
sed '3i hello world' data3
echo "-----------------更改第3行---------------------"
sed '3c hello world' data3

echo "hello world" | sed 'p'				#打印命令


  
echo $?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值