如果我不知道文件中某行的值,如何取得並更改該行的值?

如果我不知道文件中某行的值,如何取得並更改該行的值?

我想做的是:有一個文件,裡面有一行(它肯定會在那裡,100%)在這個模型中:

name_of_the_value=xxx

值在哪裡數值未知由我來說,因為它在設備和設備之間發生變化...我需要以某種方式獲取該xxx值並將其替換為用戶通過 a 給出的另一個值TextField(我為此使用Java,它適用於Android 應用程序,但它無論如何都是純 shell 腳本)。

已驗證:

  1. 尋找並刪除整行並替換為整行,例如刪除name_of_the_value=xxx並替換為name_of_the_value=user_value
  2. 僅替換xxx(值)部分
  3. 用“#”註釋任何現有的匹配行,並將整行寫入文件底部

但是我該如何使用echosed或者awk如果我不知道它的值呢?

答案1

假設 user_value 部分始終為 3 個字元長,您可以這樣做:

sed "s/name_of_the_value=.{0,3}/name_of_the_value=$new_value/"

或者,如果您確定該行後面沒有任何內容,您也可以使用:

sed "s/name_of_the_value=.*/name_of_the_value=$new_value/"

我希望我的正規表示式是正確的,我不是這方面的專家。因此,該值應該始終為3 個字元長,最好採用十六進位格式,因為在低於100 的情況下,十進位並不總是3 個字元長。也應該有效,但它假設整個部分name_of_the_value=user_value都在自己的一條線。現在在終端機中進行測試,第二種情況的輸出如下所示:

video@NAUTH:~$ echo "name_of_the_value=xxx" | sed "s/name_of_the_value=.*/name_of_the_value=$USER/"
name_of_the_value=video

當然,您需要將輸出透過管道傳回檔案中,或使用臨時檔案進行交換。你可以使用:

sed "s/name_of_the_value=.*/name_of_the_value=$new_value/" /input_file | sponge /input_file

sed 僅在讀取文件時更改輸出,而不是寫入文件,sponge 會保存輸出,直到完成並將更改寫回。

如果您不想或不能使用海綿,請在第二個檔案中寫入,然後像下面的命令鏈一樣切換它們。

sed "s/name_of_the_value=.*/name_of_the_value=$new_value/" /input_file > /output_file
rm -v /input_file
mv -v /output_file /input_file

正如 @kos 在評論中指出的,您也可以使用命令-i的標誌sed寫回輸入文件,而不使用臨時文件或sponge

sed -i "s/name_of_the_value=.*/name_of_the_value=$new_value/" /input_file

相關內容