Linux 基于模式的SED在文件中线中删除CRLF

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一次只读取一行

我有一个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一次只读取一行,没有尾随换行符,所以这不起作用。从手册页中,我可以找到一些命令,如NPD,但我无法使其工作


因此,问题是如何根据文件中前面的模式删除一个CRLF?

对,您可能已经意识到,对于sed,“行”的定义是以换行结尾的,因此您实际上要处理多个要连接的行

如果可用,可以使用“tr”(translate)命令连接线:

  • /Logger\r$/
    如果行与此正则表达式匹配
    • N
      向图案空间添加下一行
    • s/\r\n[[:blank:][]*/
      delete
      CRLF
      后跟可选空格
  • 如果存在带有
    LoggerCRLF
  • 使用
    GNU sed 4.2.2测试
    语法可能因其他实现而异

怎么办?可能与@cxw重复,我的问题是关于SED命令,而不是TR或VIM文本编辑器。在您的示例中,Tr的-d将删除所有tokens@Vahid为了清晰起见,您能否添加预期输出?(例如:如果您希望删除下一行中的空格)。。。。另外,是否可以有两个连续的以
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);$