我有一个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/