繁体   English   中英

了解sed命令

[英]Understanding sed command

如果问题太天真,请原谅。 我是shell脚本的新手,我无法找到任何有用的资源来理解细节。 我试图理解遗留脚本。 请有人告诉我以下命令的作用:

sed "s#s3AtlasExtractName#$i#g" load_xyz.sql >> load_abc.sql;

此命令将用$i替换所有出现的s3AtlasExtractName

  • s - 代替
  • - 分隔符
  • s3AtlasExtractName - 需要替换的Word
  • - 分隔符
  • $我 - i将使用变量来代替s3AtlasExtractName
  • - 分隔符
  • g - 全局s3AtlasExtractName的所有实例替换为单行,而不仅仅是第一次出现的

因此,这将解析load_xyz.sql并将所有出现的s3AtlasExtractName更改为$i的值,并将load_xyz.sql的全部内容load_xyz.sql到名为load_abc.sql且带有sed替换的文件中。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM