我有一个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?
答案 0 :(得分:2)
$ 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
语法进行测试可能会因其他实现而异[/ li>
答案 1 :(得分:0)
是的,你可能已经意识到要对sed,#34; line"的定义。是以换行符结尾的内容,因此您真正处理要加入的多行。
您可以使用" tr"来连接线条。 (translate)命令是否可用: How to concatenate multiple lines of output to one line?
答案 2 :(得分:0)
sed '/Logger\r/N;s/\r\s*//' FILE