DirectActionというJavaクラスがあるとしましょう。
クラスのいくつかのメソッドには「action」または「Action」という単語があります。
「Action」または「action」を含むすべてのメソッドの名前を取得して外部ファイルに書き込むgrepコマンドは何ですか?
例:
public class DirectAction extends ERXDirectAction {
/**
*
* @param aRequest
*/
public DirectAction(WORequest aRequest) {
}
// ============================================================================================
// ACTIONS
/**
* Default Action
*
*/
@docDirectAction
public WOActionResults defaultAction() {
}
/**
* @return goes to login page for student
*/
@docDirectAction
public WOActionResults studentAction() {
);
return nextPage;
}
/**
* @return goes to Admin login page
*/
@docDirectAction
public WOActionResults adminAction() {
return nextPage;
}
/**
* @return calls the AdminAction
*/
@docDirectAction
public WOActionResults staffAction() {
return adminAction();
}
}
私はただ次のような結果を得たいと思います。
public class DirectAction extends ERXDirectAction
public DirectAction(WORequest aRequest)
public WOActionResults defaultAction()
public WOActionResults studentAction()
public WOActionResults adminAction()
public WOActionResults staffAction()
注:これらすべての方法で唯一共通の単語は「Action」または「action」です。
可能であればgrepを使用してください:)
答え1
(完全行ではなく)一致するテキストのみを返したい場合は、この-o
フラグが必要です。
grep -o 'public .*[a|A]ction.*)'
または、拡張正規表現を使用します。
grep -Eo 'public .*[aA]ction.*\)' file
または、pub(lic)、pri(vate)、またはpro(tected)で始まる行を展開します。
grep -Eo '^(pub|pri|pro).*[aA]ction.*\)' file
答え2
しかしgrep
...
sed -n '\|DirectAction|{/^@/n;/{/s|||;p}'
私に次の結果を返します。
public class DirectAction extends ERXDirectAction
public DirectAction(WORequest aRequest)
public WOActionResults defaultAction()
public WOActionResults studentAction()
public WOActionResults adminAction()
public WOActionResults staffAction()
デフォルトでは、私はフレーズを含む行だけを処理しますDirectAction
。その後、行の最初の文字があるかどうかを確認し@
、その場合はn
現在の行を次の行で上書きします。次に、1つを見つけて{
見つかったら削除します。次にp
印刷します。
答え3
grep -i action( <file>
-i
検索大文字と小文字を区別しないでください。見たいすべての項目の最後に括弧があるように見えるので、最後に追加しましたが(
省略できます。action
ちなみに、これはgrep
マンページを読むと解決策をすぐに知ることができる最も簡単な使い方です。