Sed,使用以前的搜索结果替换

时间:2014-05-20 05:50:19

标签: regex sed

Sintetic的例子。 输入文件

help_key1
man_key1
result_key1

help_key2
man_key2

help_key3
result_key3

help_key4

我可以用

获取所有密钥
  

sed -n -e' s / help _(。*)$ / \ 1 / p'

如何在其他搜索或替换中使用match \ 1?

问题1:如何过滤具有帮助和结果前缀的键?结果为:

  

key1 key3

问题2:我如何过滤有帮助的键以及man和结果前缀?结果为:

  

KEY1

仅使用sed,不使用bash。

3 个答案:

答案 0 :(得分:3)

我建议awk,因为它有利于处理群组数据 问题1:

awk  -v RS="" -F_ '/help/ && /result/ {print $2}' file
key1
key3

awk中,您可以将记录选择器设置为空。这使它适用于由空行分隔的行组。


问题2:

awk -v RS="" -F_ '/help/ && /man/ && /result/ {print $2}' file
key1

如果订单始终相同,您可以这样做:

awk -v RS="" -F_ '/help.*man.*result/ {print $2}' file
key1

答案 1 :(得分:2)

帮助和结果

sed -n '/^help_.*/,/^$/ {
   /^help_/ h
   /^help_}/ !H
   x
   /help_\([a-zA-Z0-9_]*\)\(\n.*\)*\nresult_\1.*/ {
      s//\1/p
      b
      }
   x
   }' YourFile

添加男人

sed -n '/^help_.*/,/^$/ {
   /^help_/ h
   /^help_}/ !H
   /^$/ b test
   $ b test
   b
: test
   x
   /help_\([a-zA-Z0-9_]*\)\(\n.*\)*\nresult_\1.*/ {
      /help_\([a-zA-Z0-9_]*\)\(\n.*\)*\nman_\1.*/ {
         s//\1/p
         b
         }
      }
   }' YourFile

答案 2 :(得分:0)

如果您有权访问bash

    words={a,n,t}{a,n,t}{a,n,t}{'\n'}
    echo $words

输出:

AAA AAN AAT

等等。如果需要,输出可以通过 sort 和usr / dict传递。这被称为'支撑扩张' ,和其他一些语言有它。

我最喜欢的是echo {a,i} {s,t}给出"就像它是"

我猜你正在使用它来拼字游戏;)