【发布时间】:2021-02-18 03:27:58
【问题描述】:
我得到了令人讨厌的旧语法的 fortran 代码,并希望移植到新语法。
我的 sed 命令
sed -nr 'N;s/\n\s*\d\D\s*//g' file
应该找到编号的换行符,但由于我不知道的原因不起作用。我已经在这里查看了许多 multiline-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)
【问题讨论】:
-
sed 不支持
\d或\D..\s受GNU sed支持(不确定其他实现)...另外,使用N(无需额外解决方法命令)将阻止您再次使用该行。例如,前两行是配对的,因此您将永远无法匹配您需要的第三行
标签: regex sed replace multiline