了解sed命令

时间:2015-07-21 07:48:41

标签: shell sed

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

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

3 个答案:

答案 0 :(得分:4)

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

  • s - Substitute
  • - Delimiter
  • s3AtlasExtractName - 需要替换的Word
  • - Delimiter
  • $ i - i变量将用于替换 s3AtlasExtractName
  • - Delimiter
  • g - Global在一行中替换 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'。