我有一个java文件,其中有一行在日志末尾的CRLF

private static final Logger logger = LoggerCRLF
        .getLogger(MyClass.class);

我要做的是在我的文件中的logger之后删除crlf,并将该行合并成一行,如下所示。这不应影响我文件中的其他CRLF。
private static final Logger logger = Logger.getLogger(MyClass.class);

我试过下面的命令
find . -name *.java -exec sed -i 's/Logger\r\n//g' {} \;

但我意识到sed一次只读取一行,而不跟踪换行符,所以这不起作用。从手册页上,我能找到一些命令,如n,p和d,但我不能使它工作。
所以问题是如何根据文件中的前一个模式删除一个crlf?

最佳答案

$ cat -A ip.txt
private static final Logger logger = Logger^M$
        .getLogger(MyClass.class);$
$ sed '/Logger\r$/{N;s/\r\n[[:blank:]]*//}' ip.txt | cat -A
private static final Logger logger = Logger.getLogger(MyClass.class);$

/Logger\r$/如果行与此正则表达式匹配
N将下一行添加到图案空间
s/\r\n[[:blank:]]*//删除CRLF后跟可选空白
如果有连续的行LoggerCRLF
使用GNU sed 4.2.2语法测试可能与其他实现不同

关于linux - 根据模式使用sed删除文件行中间的CRLF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45038882/

10-13 07:31