簡體   English   中英

在Linux中使用“ sed”命令替換文本

[英]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. 1c它焊割到:
  2. Hello to the world version后面是/ etc / NewVersion的內容
  3. . 停止c命令的輸入模式
  4. w儀式和q UIT

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM