我有一个脚本文件,它使用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发布于 2012-03-02 01:24:34
所有这些都可以组合到一个awk命令中,如下所示:
awk '{if ($1 ~ /^(LOAD|IMPORT)/) {gsub(/\\/, "/", $2); system("cat " $2)} else print}' test.txt > output.txt发布于 2012-03-02 02:22:11
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此处字符串应为此处(没有$)
[是一个命令,并且前后需要空格:if [ grep '...' ... ]; then
为statement
grep 'IMPORT\|LINE' <<< "$line"
fi,除非您特别想要去掉引号的副作用。发布于 2012-03-02 01:15:25
据我所知,您正在尝试使用您正在使用的某种脚本语言(您尚未指定)内联导入,以便最终得到一个包含整个脚本的文件,这样您就可以开始尝试将该脚本转换为另一种(未指定的)语言。
您编写的bash脚本最终会将test.txt中提到的所有文件按照它们被提及的顺序连接到一个输出文件中--它不会产生您想要的原始文本和导入文本的混合。
我会建议一种完全不同的方法。使用sed将导入语句转换为cpp #include语句或m4中的等效语句,然后通过cpp或m4 (相应地)运行结果文件。这是一个小技巧,但它会产生你想要的结果。
https://stackoverflow.com/questions/9520619
复制相似问题