2016-05-21 14 views
0

私は小さなbashスクリプトを書いているので、他のスクリプトを読んでそれらの特定の関数を検索する必要があるので、それらの関数を最初から最後までコピーすることができます。私はgrepのを使用して専門家ではないので、私のような何か試してみました:シェルスクリプトから関数全体を取得する正規表現ですか?

grep -E ".*() \{.*\}" file.sh 

をしかし、それは動作しませんでしたし、それがなかった場合、それはまた、全体の機能を取得していないだろう、最初の開口部との間だけのコードブラケットと最初の閉じたもの。

これは良い正規表現ですか?必ずしもgrepを使う必要はありません。

+3

関数の本体が '{...} 'で囲まれているという保証はありません。 *任意の複合コマンドを使用できます。 – chepner

+1

さらに、関数の内部の行に '}'も含めることができます。 –

+0

質問には代表的な機能を追加してください。 – Cyrus

答えて

3

ここでホイールを改造する必要はありません。 Bashには必然的に必要な情報を得るためのパーサが含まれています。 declare(またはtype)を使用できます。例えば。

source file.sh 
declare -F  # will print list of all declared functions 
declare -f foo # will print function definition for function foo 

は、より多くの情報のためhelp declarehelp typeを参照してください。

+0

ああ、それは私が思ったよりも簡単だった。ありがとう! – Ocab19

関連する問題