글쎄요, 인터넷에 있는 예제를 사용하여 사용자 정의 스크립트에서 sed를 사용하여 대체하는 데 약 12시간이 걸렸기 때문에 여기에 질문합니다.
파일 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/
^
( ) 패턴으로 시작하는 줄 에 적용됩니다 (여기서는 고정된 문자열mupen64plus
).s: : :
:
슬래시 대신 구분 기호 로 사용되므로/
이스케이프가 필요하지 않습니다.=.*
줄 끝까지 ,=
임의의 문자(.
), 임의의 숫자( ) 를 바꾸십시오 (a는 가능한 한 많이 일치하므로 중복됩니다 ).*
$
*
=${VAR1}/${VAR2}
합계=
값${VAR1}/${VAR2}
(실제 확장은 쉘(아마도 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