免费注册 查看新帖 |

Chinaunix

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

[文本处理] 求删除特定字符片区的方法 [复制链接]

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
21 [报告]
发表于 2014-05-22 14:56 |只看该作者
回复 13# iceblood

1. perl "xxxxxxxxx $MAC"
  export the variable and get value by %ENV hash in Perl
$ export MAC=123
$ perl -e 'print "shell env \$MAC: $ENV{MAC}\n"'
shell env $MAC: 123


2. 另外文件编辑后立刻生效。
using -i argument
please refer the last reply   

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
22 [报告]
发表于 2014-05-22 15:02 |只看该作者
回复 20# iceblood


    RT是GNU extension ,忘了你的不是GNU awk了,看来GNU是个好东西啊。

   否则就如楼下所做的,设置RS了。

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
23 [报告]
发表于 2014-05-22 15:02 |只看该作者
回复 20# iceblood


    RT是GNU extension ,忘了你的不是GNU awk了,看来GNU是个好东西啊。

   否则就如楼下所做的,设置RS了。

论坛徽章:
3
酉鸡
日期:2014-04-23 17:17:56丑牛
日期:2014-05-08 11:41:302015亚冠之德黑兰石油
日期:2015-08-03 11:14:27
24 [报告]
发表于 2014-05-22 15:05 |只看该作者
回复 7# expert1


    版主,你好~
    关于这个语句有点不太明白:
    sed '/{/{:1;            N;                /}/!b1;             /n/d }'
    第一个疑问,/{/{:1;这是给标签指定地址吗?
    第二个问题,最后面的花括号是什么意思?
    不知道我的知识盲点在哪里,烦请指教,或者我该读那些资料,多谢了~

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
25 [报告]
发表于 2014-05-22 15:12 |只看该作者
回复 24# jeffreyst

sed '
    /{/{          # note: match '{' and do something in block { ... }
      :1;   
        N;
        /}/!b1;      
       /n/d
    }
'

Note: It's hard to me for sed code ...
   

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
26 [报告]
发表于 2014-05-22 15:28 |只看该作者
回复 24# jeffreyst


    如jason680所言,{}里面才是action

e.g
---------------------
xxx
yyy
lease {
     
     xxx
      yy
     pattern
}

lease {

   m
   n
   p}
....
{      # 开始{
/{/    #匹配段落lease {
:a      #标签名字任意,
N       #拼命往Pattern space赛记录 那么pattern space 就是 lease {\n xxx....\npattern
/}/!ba   #当读到段落结束标记}的时候,不跳到:a了
/pattern/d  # 由于pattern space里面是lease {\n xxx\n pattern\n},此时一个d删光。虽然没有-n,但此时pattern space
                 # 是空了,打印不了。继续下一个段落,如此循环,段落有pattern就d,没有就默认打印。
}  # 结束标记

熟悉标签b,N和d就明白了。

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
27 [报告]
发表于 2014-05-22 15:36 |只看该作者
那个:a设置一个标记,学过C语言应该知道goto语句吧,跟这个作用差不多。
b就是无条件跳到:a处;然后执行后边的N;
所以没有遇到}之前会一直N追加。
一旦遇到了,就执行后边的操作,就是d了。
d把pattern space干光,然后start next cycle,把下一个lease {读进去,接着继续上述步骤。
结合sedsed看下过程,很简单的。

论坛徽章:
3
酉鸡
日期:2014-04-23 17:17:56丑牛
日期:2014-05-08 11:41:302015亚冠之德黑兰石油
日期:2015-08-03 11:14:27
28 [报告]
发表于 2014-05-22 16:13 |只看该作者
本帖最后由 jeffreyst 于 2014-05-22 16:14 编辑

@jason680@expert1
多谢两位的解释!
现在我知道哪里出问题了,呵呵!
看到这个语句,先是被4个花括号搞乱了
后来一直纠结于开头的这个“/{/{”
经过两位的解释才发现自己之前从来没有用过这个action block...
再次感谢两位!
所谓的action block:

  1. [root@]# cat 1
  2. asdfasdf
  3. {
  4. a
  5. }
  6. {
  7. m
  8. n
  9. }
  10. {
  11. xxxx
  12. }
  13. [root@]# cat 1 | sed -n '/{/{N;p}'
  14. {
  15. a
  16. {
  17. m
  18. {
  19. xxxx
复制代码

论坛徽章:
1
金牛座
日期:2014-05-29 15:55:47
29 [报告]
发表于 2014-05-22 18:25 |只看该作者
jason680 发表于 2014-05-22 14:56
回复 13# iceblood

1. perl "xxxxxxxxx $MAC"

谢谢,perl也好用了。

论坛徽章:
1
金牛座
日期:2014-05-29 15:55:47
30 [报告]
发表于 2014-05-23 09:20 |只看该作者
wslm31 发表于 2014-05-22 12:30
awk '!/20:dc:e6:3c:75:4d/{printf $0RS}' RS="}" XXX.txt


有特殊字符意外终止了……

  1. # awk '!/'18:03:73:97:8c:82'/{printf $0RS}' RS='}' /var/db/dhcpd/dhcpd.leases
  2. # The format of this file is documented in the dhcpd.leases(5) manual page.
  3. # This lease file was written by isc-dhcp-4.2.4

  4. lease 10.108.215.157 {
  5.   starts 2 2014/02/11 04:06:44;
  6.   ends 3 2014/02/12 02:01:38;
  7.   tstp 3 2014/02/12 02:01:38;
  8.   cltt 2 2014/02/11 04:06:44;
  9.   binding state free;
  10.   hardware ethernet 6c:e8:73:ad:56:17;
  11.   uid "\001l\350s\255V\027";
  12. }
  13. lease 10.108.215.155 {
  14.   starts 3 2014/02/12 04:15:06;
  15.   ends 3 2014/02/12 07:21:35;
  16.   tstp 3 2014/02/12 07:21:35;
  17.   cltt 3 2014/02/12 04:15:06;
  18.   binding state free;
  19.   hardware ethernet 10:78:d2:cc:d3:9d;
  20.   uid "\001\020x\322\314\323\235";
  21. }
  22. lease 10.108.215.151 {
  23.   starts 2 2014/02/18 07:32:30;
  24.   ends 2 2014/02/18 08:25:55;
  25.   tstp 2 2014/02/18 08:25:55;
  26.   cltt 2 2014/02/18 07:32:30;
  27.   binding state free;
  28.   hardware ethernet 20:dc:e6:3c:75:4d;
  29.   uid "\001 \334\346<uM";
  30. }
  31. lease 10.108.215.154 {
  32.   starts 4 2014/02/20 07:34:35;
  33.   ends 5 2014/02/21 02:00:32;
  34.   tstp 5 2014/02/21 02:00:32;
  35.   cltt 4 2014/02/20 07:34:35;
  36.   binding state free;
  37.   hardware ethernet 6c:e8:73:ad:32:51;
  38.   uid "\001l\350s\2552Q";
  39. }awk: not enough args in printf(
  40. lease 10.108.215.144 {
  41.   starts 5 2014/02/21 04:26:57;
  42.   ends 6 2014/02/22 04:26:57;
  43.   tstp 6 2014/02/22 04:26:57;
  44.   cltt 5 2014/02/21 04:26:57;
  45.   binding state free;
  46.   hardware ethernet 00:25:09:02:47:1e;
  47.   uid "\001\000%\011\002G\036";
  48. })
  49. input record number 6, file /var/db/dhcpd/dhcpd.leases
  50. source line number 1
  51. #

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP