我有一个 java 文件,其中有以下行,Logger 末尾有 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 一次读取一行而不带尾随换行符,因此这是行不通的。从 man 页面中,我能够找到一些命令,例如 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/