-1

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

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

而且,我想替换POP3_SERVER_NAME我文件中第 3 行的值,这可能是也可能不是localhost其他值。

我知道如何到达第三行:

sed -n '3p' installation.sh

但我只需要得到localhost一部分。

我想打印该值,并将实际值替换为我installation.sh文件中的另一个值。

4

2 回答 2

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

与 line modify 的区别:

  • -n- 抑制图案空间的自动打印
  • p- 打印这一行。
  • 用空字符串替换匹配的字符串。

或者

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

或者

sed -n '3s/.* = //p' installation.sh
于 2013-07-30T15:52:55.750 回答
0

您可以使用 awk:

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

或使用 sed:

sed -n '3s/^.*= *\(.*\)$/\1/p' file
于 2013-07-30T15:47:49.020 回答