我在 Documentos 檔案夾中有一個名為 texto.txt 的文本檔案,其中包含一些如下所示的值:
cat ~/Documentos/texto.txt
65f8: Testado
a4a1: Testado 2
所以我想通過使用自定義函式來更改整行,該函式獲取新值作為引數。新值將始終保留前 6 個字符,僅更改它們之后的字符。雖然我只測驗前四個。
然后我編輯了我的 .bashrc,包括我的函式,如下所示。
muda()
{
export BUSCA="$(echo $* | cut -c 1-4)";
sed -i "/^$BUSCA/s/.*/$*/" ~/Documentos/texto.txt ;}
當我運行下面的命令時,它就像一個魅力,但我覺得它可以改進。
muda a4a1: Testado 3
結果:
cat ~/Documentos/texto.txt
65f8: Testado
a4a1: Testado 3
有沒有更聰明的方法來做到這一點?也許通過擺脫 BUSCA 變數?
uj5u.com熱心網友回復:
我會寫:
muda() {
local new_line="$*"
local key=${newline:0:4}
sed -i "s/^${key//\//\\/}.*/${new_line//\//\\/}/" ~/Documentos/texto.txt
}
筆記:
- 使用
local變數,而不是匯出的環境變數 - 不呼叫剪切,bash 可以提取一個子串
- 轉義變數值中的任何斜杠,以便 sed 代碼不會被破壞。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/348041.html
上一篇:帶替換的引數擴展,避免額外的變數
下一篇:使用直到回圈監控多個行程
