我可以使用哪些正则表达式来修复这种非标准的Fortran语法?

Jas*_*n R 2 regex fortran sed

我有一堆使用非标准结构表示法的Fortran 77文件(此处描述):

STRUCTURE /item/
   INTEGER id
   CHARACTER(LEN=200) description
   REAL price
END STRUCTURE
Run Code Online (Sandbox Code Playgroud)

这显然是一些旧编译器使用的语法,但后来在Fortran 90中标准化为以下内容:

TYPE item
   INTEGER id
   CHARACTER(LEN=200) description
   REAL price
END TYPE
Run Code Online (Sandbox Code Playgroud)

我想要做的是使用sed或一些其他适当的工具来自动处理我的源文件,找到旧语法的所有用法,并修补它们以使用更新的语法(即将"结构"的所有实例更改为"键入"并删除斜杠).我确信我可以构建一些正则表达式来完成这项工作,但是我对这门艺术的熟练程度还不够.

另外,与记录符号有类似的不兼容,也在链接中描述:

RECORD /item/ pear, store_catalog(100)
Run Code Online (Sandbox Code Playgroud)

变为:

TYPE(item) pear, store_catalog(100)
Run Code Online (Sandbox Code Playgroud)

我假设也可以使用类似的技术来修复这些实例.

Fre*_*Foo 5

我对Fortran语法不是很熟悉,所以我不知道如何概括它,但你的例子可以解决

sed 's%^STRUCTURE /\(.*\)/$%TYPE \1%;
     s%^END STRUCTURE$%END TYPE%'
Run Code Online (Sandbox Code Playgroud)

注意使用%分隔命令(s,替换),模式和替换.通常你会使用/,但这是要匹配的模式的一部分.

您的RECORD问题确实应该有类似的解决方案.