繁体   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