Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在shell脚本函数中提取代码_Bash_Shell_Sh - Fatal编程技术网

Bash 在shell脚本函数中提取代码

Bash 在shell脚本函数中提取代码,bash,shell,sh,Bash,Shell,Sh,我有一个包含20-30多种功能的文件,如下所示: abc(){ # code of abc function } efg(){ # code of efg function } hij(){ # code of efg function } 我想使用grep/sed或任何其他文本处理工具来提取特定函数中的代码 我试过这个: sed-n'/efg/,/\}/p'file.txt 输出: efg(){ # code of efg function } 如何排除输出的第一行

我有一个包含20-30多种功能的文件,如下所示:

abc(){
 # code of abc function
}
efg(){
 # code of efg function
}
hij(){
 # code of efg function
}
我想使用
grep
/
sed
或任何其他文本处理工具来提取特定函数中的代码


我试过这个:

sed-n'/efg/,/\}/p'file.txt

输出:

efg(){
     # code of efg function
}


如何排除输出的第一行和最后一行以仅获取代码。我知道可以使用sed删除它,但我更希望它是在一行程序中,但我自己也无法通过稍微的变化来理解它,并且使用
n
d
可以完成任务,例如

sed -n '/efg/,/[}]/{/efg/{n};/[}]/{d};p}'
示例使用/输出

$ sed -n '/efg/,/[}]/{/efg/{n};/[}]/{d};p}'
 # code of efg function
注意:仅适用于多行函数,如果愿意,您可以转义,例如
\}
而不是使用字符类
[}]

简短概要

  • -n
    禁止打印图案空间
  • /efg/,/[}]/
    用于
    efg
    }
  • {/efg/{n};
    如果匹配
    efg
    则下一行
  • /[}]/{d}如果匹配
    }
    删除
  • p
    否则打印它

如果功能都在一条线上,该怎么办?您可能需要在此处检查awk解决方案。你喜欢代码中的注释和空行吗?如果没有,您只需为每个函数执行此操作:
键入func_name | sed 1d
。使用
compgen-A函数
获取脚本源代码后的函数列表。@codeforester的注释应该是正确的答案MacOS:
sed:1:“/efg/,/[}]/{/efg/{n};/[…”:n命令末尾的额外字符