我有一个脚本文件,它使用import和load命令从其他文件引入脚本。我正在尝试将这些脚本转换为新语言,但很难通过所有不同的导入/加载来跟踪变量。我正在尝试编写一个BASH脚本来浏览文件,并从包含/导入文件的内联中导入所有文本。
使用最终解决方案!
sed -e 's/\\/\//g' test.restomatic | awk '{if ($1 ~ /^(LOAD|IMPORT)/) system("cat " $2); else print;}' > /cygdrive/c/bashScripts/testing.txt
原始文件样本:
LOAD ..\..\..\..\GlobalSuccess\IdentityShardCreate_Success.rcq
REPLACE /rest-client/request/url/*shard* "//{$OKEnv}"
EXPECT HEADER SERVER
EXPECT HEADER DATE
EXPECT RETURN-CODE 201
RUN
IMPORT ..\..\..\..\GlobalSuccess\IdentityEnvironmentCreateNewEnvironmentFromShard_Success.rcq
REPLACE /rest-client/request/url/*shard* "//{$OKEnv}/environment"
EXPECT HEADER Server
EXPECT HEADER Date
EXPECT RETURN-CODE 204
RUN
ASSIGN ShardTypeControl 1
LOOP ShardTypeControl
ASSIGN OKShard2 {$ShardNames[{$ShardTypeControl}]}
LOAD ..\..\..\..\GlobalSuccess\IdentityEnvironmentAddShardToEnvironment_Success.rcq
REPLACE /rest-client/request/url/*shard* "//{$OKShard2}/environment/{$OKEnv}"
输出文件的所需结果示例:
Original File (OF) Start
(OF) Line 1
(OF) Line 2
(OF) Line 3
Line 1 of Imported File - would have been (OF) line 4
Line 2 of Imported File
(OF) Line 5
(OF) Line 6
Line 1 of Loaded File - would have been (OF) line 7
Line 2 of Loaded File
Line 3 of Loaded File
(OF) Line 8
Line 1 of Second Imported File - would have been (OF) line 9
Line 2 of Second Imported File
答案 0 :(得分:3)
所有这些都可以在单个awk命令中组合,如下所示:
awk '{if ($1 ~ /^(LOAD|IMPORT)/) {gsub(/\\/, "/", $2); system("cat " $2)} else print}' test.txt > output.txt
答案 1 :(得分:2)
while IFS= read -r line; do
case "$line" in
LOAD *|IMPORT *) cat "${line#* }" ;;
*) echo "$line" ;;
esac
done < original.file
对问题中代码的一些评论:
cat /path/original.file | while read $line; do
if[grep 'IMPORT\|LOAD' $line]; then
working on it
else
working on it: output to file /path/testing.txt
done
while read line
(不含$
)[
是一个命令,需要前后空格:if [ grep '...' ... ]; then
grep 'IMPORT\|LINE' <<< "$line"
fi
声明if
答案 2 :(得分:0)
根据我在这里可以理解的,您正在尝试使用您正在使用的某种脚本语言(您尚未指定)来内联IMPORT,以便您最终得到包含整个脚本的单个文件,因此然后,您可以尝试将所述脚本转换为另一种(未指定的)语言。
您编写的bash脚本最终会将test.txt中提到的所有文件按照提及的顺序连接到输出文件中 - 它不会导致原始文本和导入文本混合使用后。
我建议采用完全不同的方法。使用sed将IMPORT语句转换为cpp #include语句或m4中的等效语句,然后通过cpp或(尊重地)通过m4运行生成的文件。这有点像黑客攻击,但它会产生你正在寻找的结果。