Linux 基于模式的SED在文件中线中删除CRLF
我有一个java文件,在该文件中,我在记录器末尾有一行Linux 基于模式的SED在文件中线中删除CRLF,linux,sed,Linux,Sed,我有一个java文件,在该文件中,我在记录器末尾有一行CRLF 我想做的是在我的文件中的Logger之后删除CRLF,并将该行合并为一行,如下所示。这不应影响我文件中的其他CRLF private static final Logger logger = Logger.getLogger(MyClass.class); 我尝试了下面的命令来做这件事 find . -name *.java -exec sed -i 's/Logger\r\n//g' {} \; 但我意识到SED一次只读取一行
CRLF
我想做的是在我的文件中的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?对,您可能已经意识到,对于sed,“行”的定义是以换行结尾的,因此您实际上要处理多个要连接的行 如果可用,可以使用“tr”(translate)命令连接线:
如果行与此正则表达式匹配/Logger\r$/
向图案空间添加下一行N
deletes/\r\n[[:blank:][]*/
后跟可选空格CRLF
- 如果存在带有
LoggerCRLF
- 使用
语法可能因其他实现而异GNU sed 4.2.2测试
Logger\r\n
结尾的行?我想这就是你要找的:sed'/Logger\r/{N;s/\r\N[[:blank:][]*/}
@Vahid我正在查看答案底部的sed
命令。
find . -name *.java -exec sed -i 's/Logger\r\n//g' {} \;
sed '/Logger\r/N;s/\r\s*//' FILE
$ 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);$