Regex 我可以使用什么正则表达式来修复此非标准Fortran语法?

Regex 我可以使用什么正则表达式来修复此非标准Fortran语法?,regex,sed,fortran,Regex,Sed,Fortran,我有一堆Fortran 77文件,它们使用非标准结构表示法(): 这显然是一些旧编译器使用的语法,但后来在Fortran 90中标准化为以下语法: TYPE item INTEGER id CHARACTER(LEN=200) description REAL price END TYPE 我想做的是使用sed或其他适当的工具来自动处理我的源文件,以找到旧语法的所有用法,并将它们修补为使用更新的语法(即将“structure”的所有实例更改为“type”并删除斜杠)。我确信我

我有一堆Fortran 77文件,它们使用非标准结构表示法():

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

TYPE item
   INTEGER id
   CHARACTER(LEN=200) description
   REAL price
END TYPE
我想做的是使用
sed
或其他适当的工具来自动处理我的源文件,以找到旧语法的所有用法,并将它们修补为使用更新的语法(即将“structure”的所有实例更改为“type”并删除斜杠)。我确信我可以建立一些正则表达式来实现这一点,但我在这方面的技术还不够熟练,无法开始

另一方面,与记录符号存在类似的不兼容性,链接中也有描述:

RECORD /item/ pear, store_catalog(100)
变成:

TYPE(item) pear, store_catalog(100)

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

我不太熟悉Fortran语法,所以我不知道如何概括这一点,但您的示例可以用

sed 's%^STRUCTURE /\(.*\)/$%TYPE \1%;
     s%^END STRUCTURE$%END TYPE%'
注意使用
%
来分隔命令(
s
,替换)、模式和替换。通常您会使用
/
,但这是要匹配的模式的一部分


您的
记录
问题确实应该有类似的解决方案。

谢谢。这可以很容易地修改以使搜索“STRUCTURE”不区分大小写吗?我想我还需要删除
^
字符,因为STRUCTURE的实例不在行的开头。否则,这看起来很棒。在sed表达式末尾使用标志i忽略大小写。
sed 's%^STRUCTURE /\(.*\)/$%TYPE \1%;
     s%^END STRUCTURE$%END TYPE%'