如何在sed中修改单行的一部分

时间:2013-07-30 15:43:54

标签: linux sed

我有一个installation.sh文件,例如:

 ... line 1 ...
 ... line 2 ...
 POP3_SERVER_NAME = localhost
 ... line 4 ...
 ...

并且,我想在我的文件中替换第3行POP3_SERVER_NAME的值,该值可能是localhost,也可能不是sed -n '3p' installation.sh

我知道如何通过以下方式进入第3行:

localhost

但我只需要installation.sh部分。

我想打印该值,并将实际值替换为{{1}}文件中的其他值。

2 个答案:

答案 0 :(得分:1)

您无需打印值即可替换它。在sed打印和替换需要不同的命令:

修改行

您问题的字面答案是:

sed -i '3s/POP3_SERVER_NAME = .*/POP3_SERVER_NAME = new_value/' installation.sh

说明:

  • -i - 编辑文件(如果提供扩展,则进行备份)
  • 3 - 第3行
  • s/search/replace/ - 搜索search并将其替换为replace

但是你可以通过省略其中一个约束来使它更通用:

sed -i 's/POP3_SERVER_NAME = .*/POP3_SERVER_NAME = new_value/' installation.sh

sed -i '3s/= .*$/= new_value/' installation.sh

打印值

sed -n '3s/POP3_SERVER_NAME = //p' installation.sh

与行修改的区别:

  • -n - 禁止自动打印图案空间
  • p - 打印此行。
  • 用空字符串替换匹配的字符串。

sed -n 's/POP3_SERVER_NAME = //p' installation.sh

sed -n '3s/.* = //p' installation.sh

答案 1 :(得分:0)

您可以使用awk:

awk -F '[ =]+' 'NR==3{print $3}' file

或者使用sed:

sed -n '3s/^.*= *\(.*\)$/\1/p' file