[英]Understanding sed command
如果问题太天真,请原谅。 我是shell脚本的新手,我无法找到任何有用的资源来理解细节。 我试图理解遗留脚本。 请有人告诉我以下命令的作用:
sed "s#s3AtlasExtractName#$i#g" load_xyz.sql >> load_abc.sql;
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文件中插入类似但新的值。
简而言之,它读取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'部分,有点错过了重定向部分。 '>>'标记告诉shell获取sed命令的输出(即load_xyz.sql的内容,所有出现的s3AtlasExtractName都被$ i的内容替换)并将其附加到文件'load_abc.sql'。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.