我正在尝试做的是在大量源文件中搜索特定模式,并在该模式的基础上放入另一个表达式。我正在查看的文件都具有相同的扩展名 *.F90。我的第一步是使用 grep 并找到那些包含分配但未分配的文件的所有行,所以我有:
grep –I “ allocate *(” *.F90 | grep –v allocated
我遇到的第一个问题是括号前面可能有一个或多个空格。我可以有
allocate(
or allocate (
or allocate (
这就是为什么我需要 grep 命令中的“*”。然而,一般规则(除了空格)说分配后跟“(”,然后是被分配的东西。所以我有:
allocate ( array_name ( ....
再次,空格是可选的所以我想做的是找到这个字符串,并在它前面放置以下内容:
If( allocated(array_name) ) deallocate(array_name)
在这之后的下一行我想要原始字符串allocate(array( … .
请注意,array_name 是一个字母数字字符串,替换后出现在多个位置。它是被分配的数组的名称。如果有人能给我提示如何做到这一点,我将不胜感激。我被卡住了,不知道该怎么做。