免费注册 查看新帖 |

Chinaunix

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

位置不定,顺序不定的,字符串提取,在线! [复制链接]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
11 [报告]
发表于 2009-06-05 12:48 |只看该作者

论坛徽章:
0
12 [报告]
发表于 2009-06-05 12:49 |只看该作者
对不起大家,可能说的不具体:
问题补充说法:
现在有 a b c d e  5个变量,行的排列顺序,位置不定。
如:
a b c d e
a c e d
a c
a d e
b c a
c  a
a c d
只想print只含有a c 变量的一行 (a c 顺序可以不定,位置不定),
重点 a c 变量在这行的位置是不定的  
#这行有字符串,但是提取是根据 变量 a b c d e 来提取

论坛徽章:
0
13 [报告]
发表于 2009-06-05 12:50 |只看该作者
awk '/^[^ac]*a[^ac]*c[^ac]*$/||/^[^ac]*c[^ac]*a[^ac]*$/' file

  1. [root@Mylinux tmp]# cat file
  2. a c lsjdlfj
  3. a lskdjf c
  4. lsdjfc c a alsjfj
  5. lsdj c a lsdjfl
  6. lsdjfljc a
  7. [root@Mylinux tmp]# awk '/^[^ac]*a[^ac]*c[^ac]*$/||/^[^ac]*c[^ac]*a[^ac]*$/' file
  8. a c lsjdlfj
  9. a lskdjf c
  10. lsdj c a lsdjfl
  11. lsdjfljc a
复制代码

[ 本帖最后由 ywlscpl 于 2009-6-5 12:56 编辑 ]

论坛徽章:
0
14 [报告]
发表于 2009-06-05 12:56 |只看该作者

回复 #13 ywlscpl 的帖子

这个是a c 是变量 可以么?  大侠有错误!!!

变量:
a="1" ; b="2"; c="3"; d="4" ; e="5"
FILE:
iptables -A $a -p $b --dport $c -m $d -j DROP
iptables -A $a -p $b -j DROP
iptables -A $a -p $b --dport $c -j DROP
iptables -p $b -A $a -m $e --dport $c -j DROP
iptables --dport $c -A $a -j DROP
iptables -A $a --dport $c -j DROP


现在print只含有 $a $c 的一行,
说明:
不能根据行号来打印因为排列不定, 不能根据位置来打印因为 位置不定!
只要含有$a和$c 的行 不能带有别的变量 - -!

[ 本帖最后由 bfz814 于 2009-6-5 13:09 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2009-06-05 13:03 |只看该作者
  1. [root@Mylinux tmp]# v1="test1"
  2. [root@Mylinux tmp]# v2="test2"
  3. [root@Mylinux tmp]# awk -v var1="$v1" -v var2="$v2" 'gsub(var1,"&")==1&&gsub(var2,"&")==1' file
  4. aaa test1  bbb  test2ccc
  5. test2  bbb  test1ccc
  6. [root@Mylinux tmp]# cat file
  7. aaa test1  bbb  test2ccc
  8. test2  bbb  test1ccc test1
  9. test2  bbb  test1ccc
  10. sdfjkj
复制代码


or
awk  'gsub("'$v1'","&")==1&&gsub("'$v2'","&")==1' file

[ 本帖最后由 ywlscpl 于 2009-6-5 13:05 编辑 ]

论坛徽章:
0
16 [报告]
发表于 2009-06-05 13:03 |只看该作者
变量啊……

  1. awk 'NF==2&&($1=="'$a'"&&$2=="'$c'")||($1=="'$c'"&&$2=="'$a'")' URFILE
复制代码

  1. awk '/^[ \t]*'$a'[ \t]+'$c'[ \t]*$/||/^[ \t]*'$c'[ \t]+'$a'[ \t]*$/' URFILE
复制代码

论坛徽章:
0
17 [报告]
发表于 2009-06-05 13:09 |只看该作者
变量:
a="1" ; b="2"; c="3"; d="4" ; e="5"
FILE:
iptables -A $a -p $b --dport $c -m $d -j DROP
iptables -A $a -p $b -j DROP
iptables -A $a -p $b --dport $c -j DROP
iptables -p $b -A $a -m $e --dport $c -j DROP
iptables --dport $c -A $a -j DROP
iptables -A $a --dport $c -j DROP


现在print只含有 $a $c 的一行,
说明:
不能根据行号来打印因为排列不定, 不能根据位置来打印因为 位置不定!
只要含有$a和$c 的行 不能带有别的变量 - -!

谢谢大侠们了!

[ 本帖最后由 bfz814 于 2009-6-5 13:11 编辑 ]

论坛徽章:
0
18 [报告]
发表于 2009-06-05 13:15 |只看该作者

回复 #17 bfz814 的帖子

你是想打印只含$a $c(以上指字符)的行,还是想打印只含变量$a $c值的行?
如果是后者,我15楼的满足你的要求,但你为什么给的FILE中内容都是$a $c(以上指字符),彻底晕倒

[ 本帖最后由 ywlscpl 于 2009-6-5 13:16 编辑 ]

论坛徽章:
0
19 [报告]
发表于 2009-06-05 13:19 |只看该作者

回复 #18 ywlscpl 的帖子

是只有$a 和$c 的行,
因为这个file文件:
我用sed -n "/$a/"p file|sed -n "/$c/"p 就会出现所有含有$a 和$c 的行
是含有,但我要只有 $a 和$c 的行
谢了

[ 本帖最后由 bfz814 于 2009-6-5 13:21 编辑 ]

论坛徽章:
0
20 [报告]
发表于 2009-06-05 13:19 |只看该作者
晕,顶层的例子和这个是两码事嘛……
如果只有这5个变量,剔除其他3个就是了:

  1. awk '!/ ('$b'||'$d'||'$e') /' URFILE
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP