텍스트 파일 awk 또는 sed의 지저분한 경로에서 파일 이름을 제거합니다.

텍스트 파일 awk 또는 sed의 지저분한 경로에서 파일 이름을 제거합니다.

다음과 같은 내용을 포함하는 많은 줄이 있는 xml 파일이 있습니다.

Save="C:\Users\Administrator\Desktop\my files\1020\A54f\Drawing965.DWG" Module="0"
Save="C:\Users\Administrator\Desktop\my files\2706\gFgf0g4f\File1.PNG" Module="0"
Save="C:\Users\Administrator\Desktop\my files\8151\Test\Other.000" Module="0"

파일 이름을 제거하고 다른 모든 것을 유지하고 싶습니다. 다음과 같습니다:

Save="C:\Users\Administrator\Desktop\my files\1020\A54f\" Module="0"
Save="C:\Users\Administrator\Desktop\my files\2706\gFgf0g4f\" Module="0"
Save="C:\Users\Administrator\Desktop\my files\8151\Test\" Module="0"

파일 이름과 폴더 이름은 꽤 다르지만 각 파일의 깊이는 동일합니다. 따라서 기본적으로 7번째 이후의 파일 이름은 삭제됩니다.

이 정규식을 함께 해킹했는데 작동하지만 xml의 다른 부분에 있는 파일 이름이 제거됩니다.

s/([a-zA-Z0-9_.-]+)\.([a-zA-Z0-9.]{3})$//g

답변1

Perl 방식:

perl -pne 's/^.+\\\K[^"]+//' file
Save="C:\Users\Administrator\Desktop\my files\1020\A54f\" Module="0"
Save="C:\Users\Administrator\Desktop\my files\2706\gFgf0g4f\" Module="0"
Save="C:\Users\Administrator\Desktop\my files\8151\Test\" Module="0"

데모 및 설명

답변2

이것은 GNU sed를 사용하여 수행됩니다:

    sed 's/\(.*\)\\.*\..*\(" .*\)/\1\\\2/' your_file

작동 방식은 다음과 같습니다.

  • \(위의 사용 과 \)(이것은 캡처 그룹입니다) 사이에 있는 내용을 기억합니다 .
  • 따라서 첫 번째 캡처 그룹은 도달할 때까지 가능한 한 많은 것을 기억합니다 \\.*\..*. 이는 문자 그대로의 백슬래시(이스케이프 처리해야 했기 때문에 두 개가 있음) 뒤에 임의의 문자 수와 문자 그대로의 점(이것은 파일 이름), 그 뒤에 a "(두 번째 캡처 그룹을 시작하는 위치) 까지의 내용이 옵니다 .
  • 두 번째 캡처 그룹은 줄 끝까지 공백 앞에 오는 큰따옴표 뒤의 모든 내용을 기억합니다.
  • 그런 다음 첫 번째 캡처 그룹의 기억된 내용으로 바꾸고 \1 그 뒤에 리터럴 백슬래시, 두 번째 캡처 그룹의 기억된 내용 및 을 입력합니다 \2.

원하는 대로 작동하는지 확인한 후 -i대체 작업을 수행하려면 다음을 추가하세요.

    sed -i 's/\(.*\)\\.*\..*\(" .*\)/\1\\\2/' your_file

입력:

Save="C:\Users\Administrator\Desktop\my files\1020\A54f\Drawing965.DWG" Module="0"
Save="C:\Users\Administrator\Desktop\my files\2706\gFgf0g4f\File1.PNG" Module="0"
Save="C:\Users\Administrator\Desktop\my files\8151\Test\Other.000" Module="0"

산출:

Save="C:\Users\Administrator\Desktop\my files\1020\A54f\" Module="0"
Save="C:\Users\Administrator\Desktop\my files\2706\gFgf0g4f\" Module="0"
Save="C:\Users\Administrator\Desktop\my files\8151\Test\" Module="0"

관련 정보