SED 교체 도움말

SED 교체 도움말

C:\Documents and Settings\sjohnson4\AppData\Local\Microsoft\Teams\current\Squirrel.exe 으로 교체하고 싶습니다 C:\Documents and Settings\USERNAME\AppData\Local\Microsoft\Teams\current\Squirrel.exe.

echo "C:\Documents and Settings\sjohnson4\AppData\Local\Microsoft\Teams\current\Squirrel.exe" | \
    sed  -e 's/\\Documents and Settings\\*\\/\\Documents and Settings\\USERNAME\\/'

밝혀지다

C:\Documents and Settings\USERNAME\sjohnson4\AppData\Local\Microsoft\Teams\current\Squirrel.exe

하지만

echo "C:\Documents and Settings\sjohnson4\AppData\Local\Microsoft\Teams\current\Squirrel.exe" | \
    sed  -e 's/\\Documents and Settings\\.*\\/\\Documents and Settings\\USERNAME\\/'

반품

C:\Documents and Settings\USERNAME\Squirrel.exe

어떤 아이디어가 있나요?

답변1

귀하가 요구하는 내용을 이해한다면 "sjohnson4"를 사용자 이름으로 바꾸면 도움이 될 것입니다.

sed 's/sjohnson4/USERNAME/'

이것은 sjohnson4를 검색하고 대체합니다. 이것이 필요한 것이 아니라면 알려 주시기 바랍니다.

제이슨 C.

답변2

백슬래시( \)를 필드 구분 기호로 사용하면 다음 코드는 무조건 awk세 번째 필드를 문자열로 바꿉니다 USERNAME.

awk -F '\' 'BEGIN { OFS = FS } { $3 = "USERNAME"; print }'

시험:

$ printf '%s\n' 'C:\Documents and Settings\sjohnson4\AppData\Local\Microsoft\Teams\current\Squirrel.exe' | awk -F '\' 'BEGIN { OFS = FS } { $3 = "USERNAME"; print }'
C:\Documents and Settings\USERNAME\AppData\Local\Microsoft\Teams\current\Squirrel.exe

위와 비슷한 방법을 사용하십시오 sed.

sed 's/[^\]*\\/USERNAME\\/3'

[^\]*\\이는 세 번째 발생(백슬래시가 아닌 임의의 개수 뒤에 백슬래시가 오는 경우)을 문자열로 대체합니다 USERNAME\.

시험:

$ printf '%s\n' 'C:\Documents and Settings\sjohnson4\AppData\Local\Microsoft\Teams\current\Squirrel.exe' | sed 's/[^\]*\\/USERNAME\\/3'
C:\Documents and Settings\USERNAME\AppData\Local\Microsoft\Teams\current\Squirrel.exe

답변3

"사용자 이름"과 일치시키려는 경우

sed -E "s,(^.+and Settings\\\)[A-Za-z0-9]+(\\\AppData.+$),\1USERNAME\2,"

예:

$ echo "C:\Documents and Settings\ThisIsAnotherUsername15\AppData\Local\Microsoft\Teams\current\Squirrel.exe" | sed -E "s,(^.+and Settings\\\)[A-Za-z0-9]+(\\\AppData.+$),\1USERNAME\2," 
C:\Documents and Settings\USERNAME\AppData\Local\Microsoft\Teams\current\Squirrel.exe

답변4

스크립트를 수정하려면 최소한의 변경만 하면 됩니다.

$ echo 'C:\Documents and Settings\sjohnson4\AppData\Local\Microsoft\Teams\current\Squirrel.exe' |
    sed 's/\(\\Documents and Settings\\\)[^\\]*/\1USERNAME/'
C:\Documents and Settings\USERNAME\AppData\Local\Microsoft\Teams\current\Squirrel.exe

관련 정보