사용자 정의 스크립트의 sed 및 변수 대체

사용자 정의 스크립트의 sed 및 변수 대체

글쎄요, 인터넷에 있는 예제를 사용하여 사용자 정의 스크립트에서 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

어디

  • 처음 두 줄은 변수를 초기화합니다.
  • -esed의 편집 명령 소개
  • /^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

관련 정보