Chinaunix

标题: sed 删除特定字符后如何缩进到上一行 [打印本页]

作者: situxiaoquan    时间: 2011-09-13 14:26
标题: sed 删除特定字符后如何缩进到上一行
本帖最后由 situxiaoquan 于 2011-09-13 14:37 编辑

文件内容如下:
     42   N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E6=93=8D=E7=9B=9B=E7=AB=
     43 =A0   
     44 TEL;CELL;HOME;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:1390806228=
     45 8
     46 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E6=9B=B9=E5=85=89=
     47 =E5=83
     48 TEL;CELL;HOME;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:+861390803=
     49 0504
     50 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;=E6=9B=B9=E6=B0=B8=E6=
     51 =AD=A3
     52 TEL;VOICE;HOME;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:010658656=
     53 70
     要得到的结果是:
   42 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E6=93=8D=E7=9B=9B=E7=AB=A0   
     44 TEL;CELL;HOME;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:13908062288
     46 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E6=9B=B9=E5=85=89=E5=83
     48 TEL;CELL;HOME;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:+8613908030504
     50 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;=E6=9B=B9=E6=B0=B8=E6=AD=A3
     52 TEL;VOICE;HOME;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:01065865670
     需要处理两个地方:
     1,将 =开头的行的=号去掉再追加到上一行=后面
   2,将只有数字的行缩进到上一行号码=后面,并将上一行等号去掉
作者: liion631818    时间: 2011-09-13 15:24
本帖最后由 liion631818 于 2011-09-13 15:30 编辑

  1. $ awk '{if(NR%2!=0){first_line = $0;next;}if($2~/^=/)print first_line substr($2, 2);if
  2. ($2~/^[0-9]+$/)print substr(first_line, 1, length(first_line)-1) $2;}' ufile

  3. 42 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E6=93=8D=E7=9B=9B=E7=AB=A0
  4. 44 TEL;CELL;HOME;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:13908062288
  5. 46 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E6=9B=B9=E5=85=89=E5=83
  6. 48 TEL;CELL;HOME;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:+8613908030504
  7. 50 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;=E6=9B=B9=E6=B0=B8=E6=AD=A3
  8. 52 TEL;VOICE;HOME;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:01065865670
复制代码

作者: liion631818    时间: 2011-09-13 15:27

  1. sed 'N;s/=\n.* //' ufile

  2. 42 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E6=93=8D=E7=9B=9B=E7=AB
  3. 44 TEL;CELL;HOME;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:13908062288
  4. 46 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E6=9B=B9=E5=85=89=E5=83
  5. 48 TEL;CELL;HOME;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:+8613908030504
  6. 50 N;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:;=E6=9B=B9=E6=B0=B8=E6=AD=A3
  7. 52 TEL;VOICE;HOME;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:01065865670
复制代码

作者: mpstat    时间: 2011-09-13 16:20
  1. sed ':a;$!{N;ba};s#\n=\(.*\)#\1#g; s#=\n\([0-9]*\)#\1#g' file
复制代码

作者: situxiaoquan    时间: 2011-09-13 17:16
回复 3# liion631818


    您使用的是linux 系统吗?我用的是suse9怎么运行得不到结果呢?
作者: liion631818    时间: 2011-09-13 17:25
回复 5# situxiaoquan


   哦,出的什么错?
2楼和3楼的不都行?
作者: mpstat    时间: 2011-09-13 20:13
回复  liion631818


    您使用的是linux 系统吗?我用的是suse9怎么运行得不到结果呢?
situxiaoquan 发表于 2011-09-13 17:16



    你前面那第一列数字不是你文本文件里的吧?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2