Bash 如何读取特定行的目录并输出到文本文件?

Bash 如何读取特定行的目录并输出到文本文件?,bash,Bash,在bash脚本中,我如何读取目录,解析每个文件,就像foobar\u plugin.py一样,并将行中的所有内容写入一个文件,如' def foobar(self, args): '''Backup data to repository.''' 我设想脚本化的输出将是- command foobar #pulled from the def line above# write #pulled from between ''' and '''# # goto next file; re

在bash脚本中,我如何读取目录,解析每个文件,就像
foobar\u plugin.py
一样,并将行中的所有内容写入一个文件,如
'

def foobar(self, args):
    '''Backup data to repository.'''
我设想脚本化的输出将是-

command foobar #pulled from the def line above#
write #pulled from between ''' and '''#

# goto next file; repeat#
command next_foobar
write #pulled again#
有13个foobar\u plugin.py脚本需要通读,其中3个被命名为
foobar\u barfoo\u plugin.py
。并非每个
foobar\u plugin.py
文件都将包含
def foobar(self,args):
因此,如果不是,它需要处理到下一个插件文件

和每个
foobar\u plugin.py
都包含一个不同于“”和“”的描述符,我要挖掘的就是这些描述符。


我如何才能做到这一点并将所有内容输出到一个文本文件?

如果您不想精确匹配输出格式,可以使用grep:

$ cat file
something else

def foobar(self, args):
    '''Backup data to repository.'''

blah blah blah
$ grep -rB1 "'''.*'''" .
./file-def foobar(self, args):
./file:    '''Backup data to repository.'''

-r
用于递归,而
-B1
也用于打印前一行

要从user000001添加格式化部分,假设您有以下文件:

$cat file1_plugin.py
something else

def foobar(self, args):
    '''Backup data to repository.'''

$cat file2_plugin.py
blah blah blah

def next_foobar(self, args):
    '''Backup other data'''
使用awk单衬套:

grep -B1 "'''.*'''" *_plugin.py | 
awk '$1~/def/{printf "command " ; for (i=2;i<NF;i++) printf $i" "; print $NF}
($1~/:/){printf "write " ; for (i=2;i<NF;i++) printf $i" "; print $NF"\n"}'

command foobar(self, args):
write '''Backup data to repository.'''

command next_foobar(self, args):
write '''Backup other data'''

希望这能有所帮助

我想你应该看看,因为它看起来像是你在尝试推出自己的版本。很抱歉@jeanrjc,我发现对我来说显而易见的不是对其他人,所以我改进了我原来的问题。@boudiccas:缺少的部分是你只想解析像
*\u plugin.py
这样的文件?如果是这样,只需修改grep部分:
grep-B1“'.''.''.'.*.*.\u plugin.py
。如果不是这样,请以2个文件为例重新编写您的问题,以及您期望的确切输出。是的,但我也称之为“文件描述符”,即介于“%”和“%”之间的文件描述符是我在一系列*\u plugin.py文件中真正想要的。@boudiccas:我编辑过,请告诉我您期望的输出是什么,编辑你的问题,让它更清晰我很抱歉@user000001,我发现对我来说显而易见的不是对其他人,所以我改进了我原来的问题。
grep -B1 "'''.*'''" *_plugin.py |
awk -v replace="'" '
($1~/def/){printf "command " ; for (i=2;i<NF;i++) printf $i" "; print $NF}
($1~/:/){printf "write " ; for (i=2;i<NF;i++) {gsub(replace,"",$i); printf $i" "}; gsub(replace,"",$i); print $NF"\n"}'
command foobar(self, args):
write Backup data to repository.

command next_foobar(self, args):
write Backup other data