> logfile"; system "echo 'version:$ve。UNIX 新手指南,第 3 部分:正則表達式( 五 )。" />

日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

UNIX 新手指南,第 3 部分:正則表達式( 五 )


sed s/$project/$project_name/ sed.txt
您可以在輸出中看到 $project 被更改了,但是 project 沒有被更改 。
system "echo 'project:$project_name' >> logfile";
system "echo 'version:$version' >> logfile";
system "echo 'optionalid:$optionalid' >> logfile";
system "echo 'nodes:$nodes' >> logfile";
system "echo 'threads:$threads' >> logfile";
更改某個項的多個實例
這引入了 sed 中的另一個重要功能 。如果您希望同時更改 project 的兩個實例,該怎么辦呢?通過到目前為止已學到的知識,合理的回答是只需使用 project 作為正則表達式,但是此回答并不是非常正確 。下面將繼續(xù)并進行嘗試,以便能夠演示和解釋該過程:
sed s/project/project_name/ sed.txt
在輸出中可以看到,project 的第一個實例被更改為 project_name:
system "echo 'project_name:$project' >> logfile";
system "echo 'version:$version' >> logfile";
system "echo 'optionalid:$optionalid' >> logfile";
system "echo 'nodes:$nodes' >> logfile";
system "echo 'threads:$threads' >> logfile";
然而,第二個實例未更改,盡管它肯定匹配您的正則表達式 。您從第一個示例中知道,sed 似乎更改其輸入中的每個匹配字符串,而不是僅更改第一個匹配字符串,因為它更改 logfile 的每個實例 。
區(qū)別在于,logfile 的每個實例在單獨的行上,而同一行上卻有兩個 project 實例 。這為什么非常重要?因為 sed 被實現為一個行編輯器 。它一次將一個單獨的行放到內存中,并將其作為單個單元來操作 。在運行 sed 時務必記住這點,因為所有命令行選項都是按這個設計原則來設計的(從而使大多數 sed 實現不會受到與系統(tǒng)內存有關的文件大小限制) 。缺省情況下,每一行都視為 sed 命令的一次新的執(zhí)行 。盡管在第一個示例中似乎不是這樣,但是其中 sed 命令僅替換匹配字符串的第一個實例 。然而,您可以簡單地使用一個 g 標志來改變此行為 。
g 標志
執(zhí)行同樣的 sed 命令,但這次在結尾附加一個 g:
sed s/project/project_name/g sed.txt
這次,第一行上的兩個 project 實例都被更改為 project_name:
system "echo 'project_name:$project_name' >> logfile";
system "echo 'version:$version' >> logfile";
system "echo 'optionalid:$optionalid' >> logfile";
system "echo 'nodes:$nodes' >> logfile";
system "echo 'threads:$threads' >> logfile";

推薦閱讀