免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: kofgirl
打印 上一主题 下一主题

请问 如何 反转指定行 ? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-08-08 17:52 |只看该作者
修正点小bug

sed -n '/NSValue/{h;:l n;//{G;h;$!bl};x;p;x;//q};p' sample.txt

论坛徽章:
0
12 [报告]
发表于 2010-08-08 18:03 |只看该作者
本帖最后由 黑色阳光_cu 于 2010-08-08 18:56 编辑
修正点小bug

sed -n '/NSValue/{h;:l n;//{G;h;$!bl};x;p;x;//q};p' sample.txt
黑色阳光_cu 发表于 2010-08-08 17:52



等价的Perl写法:

  1. #!/bin/env perl

  2. use strict;
  3. use warnings;

  4. my @stack;
  5. while (my $line = <DATA>)
  6. {
  7.         if (index($line, "NSValue") != -1 ... index($line, "NSValue") == -1)
  8.         {
  9.                 if (index($line, "NSValue") != -1)
  10.                 {
  11.                         unshift(@stack, $line);
  12.                 }
  13.                 else
  14.                 {
  15.                         foreach my $line (@stack)
  16.                         {
  17.                                 print $line;
  18.                         }

  19.                         @stack = ();
  20.                         print $line;
  21.                 }
  22.         }
  23.         else
  24.         {
  25.                 print $line;
  26.         }
  27. }

  28. foreach my $line (@stack)
  29. {
  30.         print $line;
  31. }

  32. __DATA__
  33. NSArray  *red = [NSArray arrayWithObjects:
  34.              [NSValue valueWithCGPoint: ccp(0, 94.0)],
  35.              [NSValue valueWithCGPoint: ccp(0, 44.0)],
  36.              [NSValue valueWithCGPoint: ccp(0, 40.0)],
  37.              [NSValue valueWithCGPoint: ccp(0, 15.0)],
  38.              nil];   

复制代码
or

  1. #!/bin/env perl

  2. use strict;
  3. use warnings;

  4. my @stack;
  5. while (my $line = <DATA>)
  6. {
  7.         if (index($line, "NSValue") != -1)
  8.         {
  9.                 unshift(@stack, $line);
  10.         }
  11.         else
  12.         {
  13.                 if ($#stack > -1)
  14.                 {
  15.                         foreach my $line (@stack)
  16.                         {
  17.                                 print $line;
  18.                         }
  19.                        
  20.                         @stack = ();
  21.                 }
  22.        
  23.                 print $line;
  24.         }
  25. }

  26. foreach my $line (@stack)
  27. {
  28.         print $line;
  29. }

  30. __DATA__
  31. NSArray  *red = [NSArray arrayWithObjects:
  32.              [NSValue valueWithCGPoint: ccp(0, 94.0)],
  33.              [NSValue valueWithCGPoint: ccp(0, 44.0)],
  34.              [NSValue valueWithCGPoint: ccp(0, 40.0)],
  35.              [NSValue valueWithCGPoint: ccp(0, 15.0)],
  36.              nil];   

复制代码

论坛徽章:
0
13 [报告]
发表于 2010-08-08 18:57 |只看该作者
shell~~~

  1. #!/bin/bash

  2. declare -a stack
  3. IFS=""

  4. while read -r line
  5. do
  6.         if [[ $line =~ "NSValue" ]]
  7.         then
  8.                 stack[${#stack[@]}]=$line
  9.         else
  10.                 if [[ ${#stack[@]} > 0 ]]
  11.                 then
  12.                         for ((n = ${#stack[@]} - 1; n >= 0; n--))
  13.                         do
  14.                                 echo ${stack[$n]}
  15.                         done
  16.                         unset stack
  17.                 fi

  18.                 echo $line
  19.         fi
  20. done <$1

  21. for ((n = ${#stack[@]} - 1; n >= 0; n--))
  22. do
  23.         echo ${stack[$n]}
  24. done
复制代码

论坛徽章:
0
14 [报告]
发表于 2010-08-08 19:14 |只看该作者
回复 13# 黑色阳光_cu

哈哈 是你啊?

论坛徽章:
2
IT运维版块每日发帖之星
日期:2016-02-10 06:20:01IT运维版块每日发帖之星
日期:2016-02-11 06:20:00
15 [报告]
发表于 2010-08-08 19:16 |只看该作者

  1. awk '/NSArray/{n=1;h=NR;print;next}/;/{m=$0;e=NR;next}{a[NR]=$0}END{for(i=e-1;i>h;i--){print a[i]}print m}' test

复制代码

论坛徽章:
0
16 [报告]
发表于 2010-08-08 19:35 |只看该作者
shell~~~
黑色阳光_cu 发表于 2010-08-08 18:57


强人啊。 学习中。

论坛徽章:
0
17 [报告]
发表于 2010-08-08 19:39 |只看该作者
nxlinux 发表于 2010-08-08 19:16


哈哈, awk 也出来 了。 学习。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP