[英]Using “sed” command in linux to replace text
我有一個與linux中sed用法有關的特定問題。
假設有一個字符串“世界版本1.0.0.1的問候”。
現在,我想從文件中獲取新版本並進行更新
例如,新版本位於/ etc / NewVersion中
所以我們可以做這樣的事情:
$newVersion = "/etc/NewVersion"
sed -i "s/1.0.0.1/$newVersion/g" /etc/motd
還有一種方法可以假設版本的最后一次更改,從1.0.0.1到其他類似1.0.0.2的版本,無論什么版本,我如何都能將其通用化我可以從文件路徑中獲取新版本並用sed更新它?
sed並不能很好地支持傳遞參數。 一個更好的解決方案將是awk:
awk -v overs="1.0.0.1" -v newver="1.0.0.2" '$0 ~ overs { flag=0;match($0,overs);print substr($0,1,RSTART-1)newver } $0 !~ overs { flag=1 } flag' /etc/motd
舊版本號的模式匹配。 如果存在,則通過設置標志= 0停止行打印。 然后匹配舊版本號,並打印該行的其余部分以及新版本號。 否則,設置flag = 1並打印該行。
使用sed和bash 命令替換從/etc/NewVersion
,並假定您的New Version文本永遠不會包含正斜杠:
sed -i "s/\(Hello to the world version \).*/\1"$(</etc/NewVersion)"/" /etc/motd
這將替換字符串“ Hello to the world version”(用/ -i
/ motd的-i
“就地”編輯),后跟所有內容,並替換為“ Hello”文本(用括號捕獲並用\\1
,然后是/etc/NewVersion
的內容。
或者,如果要允許/etc/NewVersion
任何內容,請使用ed :
ed -s /etc/motd <<< $'1c\nHello to the world version '"$(</etc/NewVersion)"$'\n.\nwq'
這將以腳本( -s
)模式編輯/ etc / motd,並將加引號的字符串作為輸入傳遞給它(ed的命令):
1
, c
它焊割到: Hello to the world version
后面是/ etc / NewVersion的內容 .
停止c
命令的輸入模式 w
儀式和q
UIT
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.