【一练】sed/awk单行脚本练习(文本替代)

上一篇 / 下一篇  2017-12-28 15:04:59 / 个人分类:shell

3、文本替代
(1)将每一行前导的空白字符(空格、制表符)删除,使之左对齐。
>> cat num3.txt 
>> blank and tab
  12345678
   12345678
    12345
>> sed 's/^[ \t]*//' num3.txt 或 awk '{sub(/^[ \t]*/,"");print $0}' num3.txt
>> blank and tab
   12345678
   12345678
   12345
(2)将每一行拖尾的空白字符(空格、制表符)删除。  
>> sed 's/[ \t]*$//' num3.txt 或 awk '{sub(/[ \t]+$/,"");print $0}' num3.txt
(3)将每一行的前导和拖尾的空白字符(空格、制表符)都删除。
>> sed 's/^[ \t]*//;s/[ \t]*$//' num3.txt  或 awk '{sub(/^[ \t]+/,"");sub(/[ \t]+$/,"");print $0}' num3.txt
(4)在每一行开头处插入5个空格。
>> sed 's/^/     /' num.txt   或  awk '{printf("     %s\n",$0)}' num.txt
>>      11 1
        11 111
        12 123
        1 23
(5)在每一行中查找字符串foo,并将找到的foo替换为bar。
>> cat num4.txt
>> footestthefoofoois
   justatestfool123
   cool
>> sed 's/foo/bar/g' num4.txt  或  awk '{gsub(/foo/,"bar");print}' num4.txt 
>> bartestthebarbaris
   justatestbarl123
   cool
(6)只在行中出现字符just情况下,将foo替换为bar。
>> sed '/just/s/foo/bar/g' num4.txt   或   awk '{if(/just/)gsub(/foo/,"bar");print}' num4.txt 
>> footestthefoofoois
   justatestbarl123
   cool
(7)只在行中未出现字符just情况下,将foo替换为bar。
>> sed '/just/!s/foo/bar/g' num4.txt    或    awk '{if(!/just/)gsub(/foo/,"bar");print}' num4.txt 
>> bartestthebarbaris
   justatestfool123
   cool
(8)将文件中foo和coo都替换成bar。
>> sed  's/foo/bar/g;s/coo/bar/g' num4.txt   或   awk '{gsub(/foo|coo/,"bar");print}' num4.txt
>> bartestthebarbaris
   justatestbarl123
   barl
(9)将每两行连接成一行。
>> cat num4.txt 
>> footestthefoofoois
   justatestfool123
   cool
   catgpwedffa
   dfe123
>> sed '$!N;s/\n//' num4.txt 或 awk '{f=!f;if(f)printf("%s",$0);else printf(" %s\n",$0)}' num4.txt 
>> footestthefoofooisjustatestfool123
   coolcatgpwedffa
   dfe123
(10)如果当前行以等号开头,将当前行并到上一行末尾,并以空格代替原来行头的等号。
>> cat num6.txt
>>12345
  dafa+=wer=
  =sdfsrwer
  =dfsfwerwer
  2we123erfdc
>> sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D' num6.txt 或 awk '{if(/^=/)printf(" %s",substr($0,2));else printf("%s%s",a,$0);a="\n"}END{printf("\n")}' num6.txt 
>>12345
  dafa+=wer= sdfsrwer dfsfwerwer
  2we123erfdc
(11)为数字字符串增加逗号分隔符号,将“1234567”改为“1,234,567”.
>> cat num7.txt 
>> 1234567890
   09876421hkjkjlkk;l;
   fgsgsg
>> sed -e:a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta' num7.txt 或 awk '{while(match($0,/[0-9][0-9][0-9][0-9]+/)){$0=sprintf("%s,%s",substr($0,0,RSTART+RLENGTH-4),substr($0,RSTART+RLENGTH-3))}print $0}' num7.txt 
>> 1,234,567,890
   09,876,421hkjkjlkk;l;
   fgsgsg
(12)在每5行后增加一行空白行。
>> cat num2.txt
>> 134
   regex123
   234
   345regex
   3456
   1234
   12345
   123456
   1234565
   1234543
   12
>> sed 'n;n;n;n;G' num2.txt 或 awk '{print $0;i++;if(i==5){printf("\n");i=0}}' num2.txt 
>> 1234
   regex123
   234
   345regex
   3456

   1234
   12345
   123456
   1234565
   1234543

   12

TAG:

 

评分:0

我来说两句

Open Toolbar