linux shell/sed/awk命令详解

一、shell 简单函数介绍

shell运算符
| 他的功能是把第一个命令command 1执行的结果作为command2的输入传给command 2
&&左边的命令(命令1)返回真(即返回0,成功被执行)后,&&右边的命令(命令2)才能够被执行;换句话说,“如果这个命令执行成功&&那么执行这个命令”。	
||则与&&相反。如果||左边的命令(command1)未执行成功,那么就执行||右边的命令(command2);或者换句话说,“如果这个命令执行失败了||那么就执行这个命令。

if常用判断
[ -a FILE ] 如果 FILE 存在则为真
[ -d FILE ] 如果 FILE 存在且是一个目录则返回为真
[ -e FILE ] 如果指定的文件或目录存在时返回为真
[ -f FILE ] 如果 FILE 存在且是一个普通文件则返回为真
[ -r FILE ] 如果 FILE 存在且是可读的则返回为真
[ -w FILE ] 如果 FILE 存在且是可写的则返回为真
[ -x FILE ] 如果 FILE 存在且是可执行的则返回为真

#aster节点进行时间同步:
ntpdate us.pool.ntp.org

#截取  /   之后
ok_name=${line##*/}
#截取  .  之前
tab_name=${ok_name%.*}

#修改hive数据库用户组,用户
切到hdfs用户,然后hdfs dfs -chown -R 用户:用户组 路径


##递归查询文件大小
 du -a -h

#查看进程数量
ps -ef | grep test.jar | grep -v grep|wc -l

#查看被占用端口的PID: sudo lsof -i:8081
netstat -tln | grep 8081

#修改文件的字符集:iconv -f GB2312 -t UTF-8 -o demo.sh demo.sh
查看执行过的命令history
                                        CPU64c           内存32--64
#修改linux用户组,用户
chown [-R] 账号名称  文件或目录

#显示行数  
nu

#如果执行错误:need 'ssh' (command not found)
用:yum -y install ssh

shell脚本执行错误 $'\r':command not found
#方法一、

sed -i 's/\r//' 脚本名

#方法二、

yum -y install dos2unix

dos2unix  脚本名

--------日期
ETL_DATE=date +%Y%m%d
##本月月初
T_MON_FIRST_DAY=`date -d "$ETL_DATE" +"%Y%m01"`
##本月十五号
T_MON_15FIRST_DAY=`date -d "$T_MON_FIRST_DAY +15 day " + "%Y%m%d"`
##下个月月初
N_MON_FIRST_DAT=`date -d "$T_MON_FIRST_DAY +1 month" + "%Y%m%d"`

二、sed命令详解
## 如果想要真正修改 就需要sed -i ,sed 只是表面修改,真正的文件是没有修改的

sed '/123/ahello' 1.txt                         #向内容123后面添加hello,如果文件中有多行包括123,则每一行后面都会添加
sed  '$ahello'  1.txt                           #在最后一行添加hello
sed '3ihello'  1.txt                            #在第三行之前插入hello
sed '/123/ihello'  1.txt                        #在包含123的行之前插入hello,如果有多行包含123,则包含123的每一行之前都会插入hello
sed '$ihello'  1.txt                            #在最后一行之前插入hello
sed  '1chello'  1.txt                           #将文件1.txt的第一行替换为hello
sed  '/123/chello'  1.txt                       #将包含123的行替换为hello
sed '$chello'  1.txt                            #将最后一行替换为hello
sed  '4d'  1.txt                                #删除第四行
sed '1~2d' 1.txt                                #从第一行开始删除,每隔2行就删掉一行,即删除奇数行
sed   '1,2d'  1.txt                             #删除1~2行
sed  '1,2!d'  1.txt                             #删除1~2之外的所有行
sed  '$d'   1.txt                               #删除最后一行
sed  '/123/d'   1.txt                           #删除匹配123的行
sed  '/123/,$d'  1.txt                          #删除从匹配123的行到最后一行
sed  '/123/,+1d'  1.txt                         #删除匹配123的行及其后面一行
sed  '/^$/d'    1.txt                           #删除空行
sed   '/123\|abc/!d'  1.txt                     #删除不匹配123或abc的行,/123\|abc/ 表示匹配123或abc ,!表示取反
sed  '1,3{/123/d}'   1.txt                      #删除1~3行中,匹配内容123的行,1,3表示匹配1~3行,{/123/d}表示删除匹配123的行
sed  's/123/hello/'   1.txt                     #将文件中的123替换为hello,默认只替换每行第一个123
sed  's/123/hello/g'  1.txt                     #将文本中所有的123都替换为hello
sed 's/123/hello/2'   1.txt                     #将每行中第二个匹配的123替换为hello
sed  -n 's/123/hello/gpw  2.txt'   1.txt        #将每行中所有匹配的123替换为hello,并将替换后的内容写入2.txt
sed  '/#/s/,.*//g'  1.txt                       #匹配有#号的行,替换匹配行中逗号后的所有内容为空  (,.*)表示逗号后的所又内容
sed  's/..$//g'  1.txt                          #替换每行中的最后两个字符为空,每个点代表一个字符,$表示匹配末尾  (..$)表示匹配最后两个字符
sed 's/^#.*//'  1.txt                           #将1.txt文件中以#开头的行替换为空行,即注释的行  ( ^#)表示匹配以#开头,(.*)代表所有内容
sed 's/^#.*//;/^$/d'  1.txt                     #先替换1.txt文件中所有注释的空行为空行,然后删除空行,替换和删除操作中间用分号隔开
sed 's/^[0-9]/(&)/'   1.txt                     #将每一行中行首的数字加上一个小括号   (^[0-9])表示行首是数字,&符号代表匹配的内容
或者  sed 's/[0−9][0−9]/(\1)/'   1.txt          #替换左侧特殊字符需钥转义,右侧不需要转义,\1代表匹配的内容
sed  's/$/&'haha'/'  1.txt                      # 在1.txt文件的每一行后面加上"haha"字段
sed  -n '3p'  1.txt                             #打印文件中的第三行内容
sed  -n '2~2p'  1.txt                           #从第二行开始,每隔两行打印一行,波浪号后面的2表示步长
sed -n '$p'  1.txt                              #打印文件的最后一行
sed -n '1,3p'  1.txt                            #打印1到3行
sed  -n '3,$p'  1.txt                           #打印从第3行到最后一行的内容
sed  -n '/you/p'  1.txt                         #逐行读取文件,打印匹配you的行
sed  -n '/bob/,/too/p'  1.txt                   #打印从匹配内容bob到匹配内容too的行
sed  -n "$="   1.txt                            #打印1.txt文件最后一行的行号(即文件有多少行,和wc -l 功能类似)
sed  -n '/error/='  1.txt                       #打印匹配error的行的行号
sed  -n '/error/{=;p}'   1.txt                  #打印匹配error的行的行号和内容(可用于查看日志中有error的行及其内容)
sed  -n -e '1w  2.txt'  -e '$w 2.txt'   1.txt   #将1.txt的第1行和最后一行内容写入2.txt
sed  -n -e '1w  2.txt'  -e '$w  3.txt'  1.txt   #将1.txt的第1行和最后一行分别写入2.txt和3.txt
sed  -n  '/abc\|123/w  2.txt'    1.txt          #将1.txt中匹配abc或123的行的内容,写入到2.txt中	


a='s/^  *>//            #定义一个变量a保存sed指令,'s/^ *>//':表示匹配以0个或多空格开头紧跟一个'>'号的行,将匹配内容替换
s/\t*//                 #'s/\t*//':表示匹配以0个或多个制表符开头的行,将匹配内容替换
s/^>//                  #'s/^>//' :表示匹配以'>'开头的行,将匹配内容替换
s/^ *//'                #'s/^ *//':表示匹配以0个或多个空格开头的行,将匹配内容替换
#echo $a
sed "$a" $1             #对用户给定的文本文件进行格式化处理

三、awk 命令详解

awk -F指定的是分隔符    -f指定的是脚本   -v指定的是参数

$1 指指定分隔符后,第一个字段,$3第三个字段, \t是制表符
一个或多个连续的空格或制表符看做一个定界符,即多个空格看做一个空格
awk -F":" '{print $1}'  /etc/passwd
awk -F":" '{print $1 $3}'  /etc/passwd                             //$1$3相连输出,不分隔
awk -F":" '{print $1,$3}'  /etc/passwd                             //多了一个逗号,$1$3使用空格分隔
awk -F":" '{print $1 " " $3}'  /etc/passwd                         //$1$3之间手动添加空格分隔
awk -F":" '{print "Username:" $1 "\t\t Uid:" $3 }' /etc/passwd     //自定义输出  
awk -F: '{print NF}' /etc/passwd                                   //显示每行有多少字段
awk -F: '{print $NF}' /etc/passwd                                  //将每行第NF个字段的值打印出来
awk -F: 'NF==4 {print }' /etc/passwd                               //显示只有4个字段的行
awk -F: 'NF>2{print $0}' /etc/passwd                               //显示每行字段数量大于2的行
awk '{print NR,$0}' /etc/passwd                                    //输出每行的行号
awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd                    //依次打印行号,字段数,最后字段值,制表符,每行内容
awk -F: 'NR==5{print}'  /etc/passwd                                //显示第5行
awk -F: 'NR==5 || NR==6{print}'  /etc/passwd                       //显示第5行和第6行
route -n|awk 'NR!=1{print}'                                        //不显示第一行



IF语句
必须用在{}中,且比较内容用()扩起来
awk -F: '{if($1~/mail/) print $1}' /etc/passwd                                       //简写
awk -F: '{if($1~/mail/) {print $1}}'  /etc/passwd                                   //全写
awk -F: '{if($1~/mail/) {print $1} else {print $2}}' /etc/passwd                   //if...else...
 
-f 脚本文件
awk -f script.awk  file
BEGIN{
FS=":"
}
{print $1}   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值