sed - 在bash中替换特定行

分享于 

2分钟阅读

ubuntu

  繁體

问题:

我想在一个文件中更改800行,如果我使用下面的命令,它可以工作


sed -i '800s/old_pattern/new_pattern/' $filepath



有没有办法通过下面的变量传递行号


sed -i '"$linenum"s/old_pattern/new_pattern/' $filepath



我尝试了,但是不能工作。


答案1:

如果$linenum位于单引号内,则不会展开,你只需将它移到外部:


sed -i"$linenum"'s/old_pattern/new_pattern/'"$filepath"




答案2:

不能在单引号内扩展变量,请尝试在没有单引号的情况下运行,最好使用${} 在字符串中展开它。


machine:/tmp$ cat testfile


Line No 1


Line No 2


Line No 3


Line No 4


Line No 5


Line No 6


Line No 7


Line No 8


Line No 9


Line No 10


machine:/tmp$ linenum="5"


machine:/tmp$ filename="/tmp/testfile"


machine:/tmp$ sed -i"${linenum}s/No 5/No 11/" $filename 


machine:/tmp$ cat testfile


Line No 1


Line No 2


Line No 3


Line No 4


Line No 11


Line No 6


Line No 7


Line No 8


Line No 9


Line No 10


machine:/tmp$





rep  repl  BASH  SED  
相关文章