我有一个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}}文件中的其他值。
答案 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