regex - sed 多行搜索替换
问题描述
我得到了令人讨厌的旧语法的 fortran 代码,并想移植到新语法。我的sed
命令
sed -nr 'N;s/\n\s*\d\D\s*//g' file
应该找到编号的换行符,但由于我不知道的原因不起作用。我已经在sed
这里查看了许多多行问题,但我仍然无法解决我的误解。据我了解,该命令的工作方式如下:
N append next line to pattern space; thus pattern space has two lines with \n in between
s///g usual search-replace
\n\s*\d\D\s* matches a newline followed by \s*, a digit, a non-digit and a \s* again
源代码看起来像
if(condition) then
call func1(v1, v2, v3, v4
1 ,v5,v6,v7)
else
call func2(v1, v2, v3, v4
1 ,v5,v6,v7)
endif
call MPI_BCAST(num(1),1,MPI_DOUBLE_PRECISION
1 ,masterid,comm,mpinfo)
21 format(' text',2x,f10.5)
并应转换为目标代码
if(condition) then
call func1(v1, v2, v3, v4,v5,v6,v7)
else
call func2(v1, v2, v3, v4,v5,v6,v7)
endif
call MPI_BCAST(num(1),1,MPI_DOUBLE_PRECISION,masterid,comm,mpinfo)
21 format(' text',2x,f10.5)
解决方案
这可能对您有用(GNU sed):
sed -E ':a;N;s/\n\s*[0-9]\s*([^0-9])/\1/;ta;P;D' file
使用 2 行窗口遍历文件。
如果第二行以一些或没有空格开始,然后是一个数字,然后是一些更多或没有空格,然后是一个非数字,用非数字替换它并重复。否则打印窗口的第一行,然后将其删除并重复。
推荐阅读
- spring-boot - 如何在 Spring Boot 中向 EmbeddedKafka 发送具有特定偏移量的消息?
- c# - unity c# 需要帮助理解switch语句
- apache-flink - Flink 接收器文件系统作为镶木地板 - 保存嵌套数据时出错
- excel - 用户窗体中几个命令按钮的唯一代码
- jenkins - Unbale 使用 git 参数插件检索 git 引用。创建构建时出现以下错误
- github - 如何在 github 操作中编写 pr 构建检查?
- php - SQL 从数组中删除条目作为源
- node.js - 如何为 Firebase 推送通知生成设备令牌?
- python-3.x - 似乎无法让蓝牙代理在 Raspberry Pi 中工作
- dns - 带有子域的 Cloudflare DNS