假设我有一个名为 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
。然后,我检查该行的第一个字符是否是 an @
,如果是,我用n
ext 行覆盖当前行。接下来我寻找一个{
,如果找到我将其删除。然后我p
打印。
答案3
grep -i action( <file>
使-i
搜索不区分大小写,我(
在末尾添加了action
,因为看起来您希望看到的所有内容末尾都有一个括号,但您可以将其省略。
根据记录,这是grep
您会发现的最简单的用法;阅读手册页很快就会发现这个解决方案。