sed模式替换为新线路

sed模式替换为新线路,sed,Sed,我试图用以下命令替换目录中所有文件中的insert: find . -type f -exec sed -i.bak ':begin;$!N;s/\(@Autowired\)\n\(public .*\)\((ServletRequest\)/\2() \{\}\n&/;tbegin' {} \; 以下是我想做的: 匹配: @Autowired public something(ServletRequest 替换为: public something() {} @Autowired

我试图用以下命令替换目录中所有文件中的insert:

find . -type f -exec sed -i.bak ':begin;$!N;s/\(@Autowired\)\n\(public .*\)\((ServletRequest\)/\2() \{\}\n&/;tbegin' {} \;
以下是我想做的:

匹配:

@Autowired
public something(ServletRequest
替换为:

public something() {}
@Autowired
public something(ServletRequest
我基本上是在尝试向某个目录/包中的所有java类添加一个默认构造函数。我似乎无法与新行相匹配

这似乎有效:

sed '/@Autowired/{:l
    N;s/\(.*public[ ]*\)\([^(]*\)\((ServletRequest\)/public \2() {}\n\1\3/;
    /ServletRequest/!bl}' input
如果ServletRequest位始终位于@autowired之后:

sed '/@Autowired/{
   N;s/\(.*public[ ]*\)\([^(]*\)\((ServletRequest\)/public \2() { }\n\1\3/}' 
  input

为您的命令获取“未知选项
s
,缺少某些内容?第二个命令不会产生错误,但在替换时缺少方法名称:public something(){}@Autowired public*missing*(ServletRequest