好吧,我在这里问是因为我有大约 12 个小时尝试使用互联网上的示例在自定义脚本上使用 sed 进行替换。
在文件中 a 有很多行,但我想替换“=”之后的值如下
[Paths]
config=
data=
mupen64plus=
plugins=
roms=
[Plugins]
audio=
input=
rsp=
video=
我需要在替换后放入结果中的值:嗯,我需要变量“$PWD”的结果,而不是字面上的“$PWD”
[Paths]
config="$PWD/Datos/config"
data="$PWD/Datos/config"
mupen64plus="$PWD/$EJECUTABLE"
plugins=./.libs/64Bits/plugin
roms="$PWD/Roms"
[Plugins]
audio=mupen64plus-audio-sdl
input=mupen64plus-input-sdl
rsp=mupen64plus-rsp-cxd4-sse2
video=mupen64plus-video-glide64mk2
因为我花了太多时间尝试这样的事情:
sed -i "s|mupen64plus=.*\"|mupen64plus="$PWD/"$EJECUTABLE\"|g" "file.conf"
这不会使某些内容存档
另一种变化如:
sed "s#^(mupen64plus=).*#\l ${"\/`pwd`"//#/\\#}#" "file.conf"
显示“不良替代”或类似内容
我尝试但不起作用的另一件事:
sed 's:#mupen64plus=:'`pwd`':' "file.conf"
这 :
sed -E "s/(data=).*/\1\.\/Datos\/\config/" "./file.conf"
进行此替换:
data=./Datos/nfig
sed -E "s/(data=).*/\1\.\/Datos\/\c\/o\/nfig/" "./Datos/config/mupen64plus-qt.conf"
data=./Datos/oo/nfig
sed -E "s/(data=).*/\1\.\/Datos\\co\nfig/" "./Datos/config/mupen64plus-qt.conf"
data=./Datos/
好吧,或者使用像 awk 这样的其他东西更容易,有人可以帮助我吗?
答案1
使用你的骨架配置文件
VAR1=/home/archemar
VAR2=some/lib
sed -e "/^mupen64plus/s:=.*$:=${VAR1}/${VAR2}:" \
-e "/^config/s:=.*:=${VAR1}/DataOs/config:" config
在哪里
- 前两行初始化变量
-e
在sed中引入编辑命令/^mupen64plus/
适用于以 (^
) 模式开头的行(此处固定 stringmupen64plus
)s: : :
替换,用作:
分隔符而不是/
斜杠,因此不需要转义=.*
替换=
、任何字符 (.
)、任何数字 (*
) 直到行尾(a$
是多余的,因为*
会匹配尽可能多的)=${VAR1}/${VAR2}
的=
和值${VAR1}/${VAR2}
(实际的扩展是通过调用 shell (可能是 bash)来完成,这就是为什么我们需要双引号而不是单引号)
结果是
[Paths]
config=/home/archemar/DataOs/config
data=
mupen64plus=/home/archemar/some/lib
plugins=
roms=
[Plugins]
audio=
input=
rsp=
video=
我建议不要使用就地版本 ( -i
),或使用备份文件
sed -i .bak "/^mupen64plus/s:=.*$:=${VAR1}/${VAR2}:
/^config/s:=.*:=${VAR1}/DataOs/config:" config
另一种方法是这里的文档
cat <<END-OF-FILE > config
[Paths]
config="$PWD/Datos/config"
data="$PWD/Datos/config"
mupen64plus="$PWD/$EJECUTABLE"
plugins=./.libs/64Bits/plugin
roms="$PWD/Roms"
[Plugins]
audio=mupen64plus-audio-sdl
input=mupen64plus-input-sdl
rsp=mupen64plus-rsp-cxd4-sse2
video=mupen64plus-video-glide64mk2
END-OF-FILE
这将写入一个配置文件,其中所有变量都已展开
答案2
经过几个小时的搜索,我发现了这个(在寻找 AWK 使用示例时),使用 sed 将 Windows 路径替换为数字。
在一个评论我看到了以下内容:
sed -i 's^<customTag>C:\\path\\to\\'${OLD_VER}'</customTag>^<customTag>C:\\path\\to\\'${NEW_VER}'</customTag>^g' test.txt
我用这些命令解决了:
sed -i "s/[.].*//" "./Datos/config/mupen64plus-qt.conf"
sed -i "s/[:/].*//" "./Datos/config/mupen64plus-qt.conf"
sed -i 's^mupen64plus='${VIEJO}'^mupen64plus='${PWD}'/'${EJECUTABLE}'^g' ./Datos/config/mupen64plus-qt.conf #Especifica el binario ejecutable que se utilizara
sed -i 's^config='${VIEJO}'^config='${PWD}'/'Datos/config'^g' ./Datos/config/mupen64plus-qt.conf
sed -i 's^data='${VIEJO}'^data='${PWD}'/'Datos/config'^g' ./Datos/config/mupen64plus-qt.conf
sed -i 's^plugins='${VIEJO}'^plugins='${PWD}'/'.libs/64Bits/plugin'^g' ./Datos/config/mupen64plus-qt.conf
sed -i 's^roms='${VIEJO}'^roms='${PWD}'/'roms'^g' ./Datos/config/mupen64plus-qt.conf