用于根据模式生成代码的脚本

时间:2014-02-27 22:34:45

标签: regex bash vbscript awk language-agnostic

我正在尝试生成代码以重新初始化文件xyz中声明的对象。对于声明如下的每个变量(x表示任何字符,可以重复任意次数): -

Private lst_xxxxxxxxx As xxxxxxxxxxx

Private _lst_xxxxxx As xxxxxxxxxxx

我想生成类似的东西: -

lstxxxxxxxx.Clear()

每次出现这种情况,然后换行。

我尝试使用像[^ * [_] lst *]这样的东西来匹配awk中的行,但它最终捕获了不需要的表达式 我可以使用标签中的任何脚本工具来完成这项任务,只需要完成工作。

2 个答案:

答案 0 :(得分:2)

您可以使用以下sed

sed -nr 's/Private _?(lst)_(\w*) As \w*/\1\2.Clear()/p' file

-n阻止了打印,-r只允许抓取()的群组,然后使用\1\2打印...

实施例

$ cat a
how are
Private lst_hey As you
Private _lst_helloooo As blabla
Private _lst_hello
you
i am ok

$ sed -nr 's/Private _?(lst)_(\w*) As \w*/\1\2.Clear()/p' a
lsthey.Clear()
lsthelloooo.Clear()

答案 1 :(得分:1)

问题的标签是awk,看起来你更喜欢awk。

awk '/Private.*As/{gsub(/_/,X,$2);print $2 ".Clear()"}' file

lsthey.Clear()
lsthelloooo.Clear()

如果您需要输出显示为@fedorqui

awk '/Private.*As/{gsub(/_?lst_/,X,$2);print $2 ".Clear()"}' file

hey.Clear()
helloooo.Clear()
相关问题