替换文件特定行号中的路径

Replace path in specific line number of file

我有一个文件包含:

 Source defaults file; edit that file to configure this script.
 
 AUTOSTART="all"
 
 STATUSREFRESH=10
 
 OMIT_SENDSIGS=0
 
 if test -e /etc/default/openvpn ; then
 
   . /etc/default/openvpn
 
 fi

我想将第 5 行中的路径 /etc/default/openvpn 更改为 /mnt/data/default/openvpn 第 6 行也是如此。 我不能使用 sed -i '5s/etc/default...' , 使用 awk 我无法替换文件中的结果。

有人有想法吗?

谢谢。

尝试过的命令:

var1='/etc/default/openvpn'

var2='/mnt/data/default/openvpn'

sed -i '5s/'$var'/'$var2'/' files.txt

sed -i '5s/etc/default/openvpn/mnt/data/default/openvpn/' files.txt

sed -i '5s/'/etc/default/openvpn'/'/mnt/data/default/openvpn'/g' files.txt

awk 'NR==5 { sub("/etc/default/openvpn", "/etc/default/openvpn", [=11=]); print }' files.txt

使用 awk,我无法保存文件中的更改

这里的问题是正在使用的分隔符,因为它会与 sed 的默认分隔符冲突。

要解决此问题,您可以将正在使用的分隔符更改为未出现在您的数据中的任何其他字符或转义默认分隔符 \/

使用sed

$ sed -i.bak 's|/etc/default/openvpn|/mnt/data/default/openvpn|' input_file
$ cat input_file


    Source defaults file; edit that file to configure this script.

    AUTOSTART=all

    STATUSREFRESH=10

    OMIT_SENDSIGS=0

    if test -e /mnt/data/default/openvpn ; then

    . /mnt/data/default/openvpn

    fi