Shell
grep Java 方法
假設我有一個名為 DirectAction 的 java 類
類中的一些方法有“action”或“Action”這個詞
什麼是 grep 命令來獲取所有具有“Action”或“action”的方法的名稱並將其寫入外部文件?
例子:
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 :)
如果您只想返回匹配的文本(而不是整行),則需要
-o
標誌grep -o 'public .*[a|A]ction.*)'
或使用擴展的正則表達式
grep -Eo 'public .*[aA]ction.*\)' file
或者,擴展到任何以 pub(lic)、priv(vate) 或 pro(tected) 開頭的行
grep -Eo '^(pub|pri|pro).*[aA]ction.*\)' file
不是
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
。然後,我檢查該行的第一個字元是否為 an ,如果是,我用ext 行@
覆蓋目前行。n
接下來,我尋找一個{
,如果找到,我將其刪除。然後我p
沖洗。