Bash 如何读取特定行的目录并输出到文本文件?
在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
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