如果问题太天真,请原谅。我是shell脚本的新手,我无法找到任何有用的资源来理解细节。我试图理解遗留脚本。请有人告诉我以下命令的作用:
sed "s#s3AtlasExtractName#$i#g" load_xyz.sql >> load_abc.sql;
答案 0 :(得分:4)
此命令将用$i
替换所有出现的 s3AtlasExtractName 。
i
变量将用于替换 s3AtlasExtractName 因此,这将解析load_xyz.sql
并将所有出现的 s3AtlasExtractName 更改为$i
的值,并将load_xyz.sql
的全部内容附加到带有sed替换的文件名为load_abc.sql
。
答案 1 :(得分:0)
sed是一个命令行流编辑器。您可以在此处找到有关它的信息: http://www.computerhope.com/unix/used.htm
下面显示了一个简单的示例,其中sed用于将单词“test”替换为myfile.txt中的单词“example”,但输出发送到newfile.txt
sed's / test / example / g'myfile.txt> newfile.txt
您的脚本似乎通过替换load_xyz.sql文件的内容并将其存储在新文件load_abc.sql中来执行类似的功能。如果没有更多代码,我只是在猜测,但似乎参数$ i可能是用作计数器,在load_abc.sql文件中插入类似但新的值。
答案 2 :(得分:-1)
简而言之,它读取load_xyz.sql并用shell变量“i”中存储的任何内容替换每次出现的“s3AtlasExtractName”。
长版本是sed接受许多具有不同格式的子命令。任何“简单”的sed命令看起来都像'sed'。子命令的第一个字母告诉您sed将对您的文件执行哪个操作。
“s”操作代表“替代”并且是最常用的。接下来是类似Perl的正则表达式:分隔符,要查找的正则表达式,分隔符,要替换的值,分隔符,PREG标志。在你的情况下,分隔符是'#',这是非常不寻常但不被禁止的,所以命令将'$ i'替换为's3AtlasExtractName'的每个实例。 'g'PREG标志告诉sed替换每个模式的出现(默认是仅替换输入中每一行的第一次出现)。
最后,在双引号分隔的字符串中使用“$ i”告诉shell实际扩展shell变量'i',这样你就可以寻找一个shell语句设置(可能是'for' '声明)。
希望这有帮助。
编辑:我专注于'sed'部分,有点错过了重定向部分。 '>>' token告诉shell获取sed命令的输出(即load_xyz.sql的内容,所有出现的s3AtlasExtractName都被$ i的内容替换)并将其附加到文件'load_abc.sql'。