簡體   English   中英

sed用行號替換整行 - 鏈接命令

[英]sed replace whole line by line number - chaining commands

我需要替換文件中的一行並與之斗爭。 首先,我需要在文件中找到一個字符串,將此行號存儲為變量,然后使用帶有新字符串的變量替換整行。

我嘗試了一些sed的變種,目前我的代碼如下:

line=$(grep -n "latitude" /tmp/system.cfg |cut -f1 -d:); 
sed "{$line}s/.*/system.latitude=1.888888/" /tmp/system.cfg ;

我已經運行了第一個命令並成功設置了line 當回顯$ line時我得到176.然而,sed命令似乎沒有替換行,無論我是否使用變量或手動放置176這樣

sed "176s/.*/system.latitude=1.888888/" /tmp/system.cfg ;

我也嘗試了以下似乎將行寫入文件,但它添加了行,而不是覆蓋現有行:

sed -i  $line'i'"system.latitude=1.76011"  /tmp/system.cfg;
line=$(grep -n "latitude" /tmp/system.cfg |cut -f1 -d:); 

我也試過使用單引號和雙引號無濟於事。 有人能指出我在哪里出錯了。

如果我理解你的話,你可以保存grep|cut ,你的要求可以用(gnu)sed一次性完成:

sed -i '/latitude/s/.*/system.latitude=1.888888/' /tmp/system.cfg

當他提到將grep完全從等式中切除時,Kent絕對是正確的。 對於這里感興趣的人是使用我的方法的最終代碼:

line=$(grep -n "latitude" /tmp/system.cfg |cut -f1 -d:); 
sed -i "${line}s/.*/system.latitude=1.999/" /tmp/system.cfg;

但是我將與Kent的答案進行最終實施。

正如湯姆所指出的那樣,這是你承諾一個過程並使問題進一步復雜化的問題之一:

這就是所謂的XY問題。 你決定了一個過程(找到行,存儲到一個變量等)並詢問如何做到這一點,而不是簡單地問“如何替換匹配模式的整行”。 肯特做得好到底。 - Tom Fenech

暫無
暫無

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

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