最後に、友人が正規表現ではなくPythonを使用して解決策を見つけました。他の誰かがこの問題に直面した場合に備えて、ここで共有します。Python コードは次のとおりです。入力ファイルと出力ファイルの 2 つの引数を取ります。
#!/usr/bin/python
import sys
import re
if (len(sys.argv)<3):
print "Try with two arguments."
sys.exit()
FILEIN = sys.argv[1]
FILEOUT = sys.argv[2]
substitutions = { \
"call":"CALL" ,\
"parameter":"PARAMETER" ,\
"allocatable":"ALLOCATABLE" ,\
"dimension":"DIMENSION" ,\
"integer":"INTEGER" ,\
"logical":"LOGICAL" ,\
"double precision":"DOUBLE PRECISION" \
}
patterns = []
for s in substitutions:
patterns.append(["(^[^!]*)\\b%s\\b"%s,"\\1%s"%substitutions[s]])
patterns.append(['("[^"]*)\\b%s\\b([^"]*")'%substitutions[s],"\\1%s\\2"%s])
patterns.append(["('[^']*)\\b%s\\b([^']*')"%substitutions[s],"\\1%s\\2"%s])
patterns.append(["(\([^\)]*)\\b%s\\b([^\)]*\))"%substitutions[s],"\\1%s\\2"%s])
retList = []
f = open(FILEIN,"r")
for line in f:
for p in patterns:
prevLine=""
nextLine="1"
while (prevLine!=nextLine):
nextLine = re.sub(p[0],p[1],line)
prevLine = line
line = nextLine
retList.append(line)
f.close()
f = open(FILEOUT,"w")
f.write(''.join(retList))
f.close()