簡體   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