Bash: 새 파일에 파일 내용을 추가하고 각 파일의 마지막 줄에 주석을 추가합니다.

Bash: 새 파일에 파일 내용을 추가하고 각 파일의 마지막 줄에 주석을 추가합니다.

다음 파일이 있는데 모두 축소된 JavaScript 코드가 포함되어 있습니다. 각 파일은 주석으로 끝납니다.

폴더 구조

|--static
  |--js
    |--1.1001bbaf.chunk.js
    |--runtime~main.229c360f.js
    |--main.57f2973b.chunk.js

1.1001bbaf.chunk.js

(window.webpackJsonp=window.webpackJsonp||[]).push .....
//# sourceMappingURL=1.1001bbaf.chunk.js.map

런타임~main.229c360f.js

!function(e){function r(r){for .....
//# sourceMappingURL=runtime~main.229c360f.js.map

main.57f2973b.chunk.js

(window.webpackJsonp=window.webpackJsonp||[]).push .....
//# sourceMappingURL=main.57f2973b.chunk.js.map

내 요구 사항은 모든 파일의 내용을 단일 파일로 플러시하여 main.js내용을 덮어쓰는 대신 추가하는 것입니다.

다음 솔루션을 시도했습니다.

  1. cat static/js/*.js >> main.js

    이것은 훌륭하게 작동하지만 두 번째 파일의 내용을 첫 번째 파일 끝에 추가하고 주석으로 끝납니다. 이 같은:

//#sourceMappingURL=1.1001bbaf.chunk.js.map(window.webpackJsonp=window.webpackJsonp||[]).push .....

이제 전체 줄은 vim 텍스트 편집기의 주석이고 해당 줄에서 시작하는 모든 내용은 Atom 텍스트 편집기의 주석입니다.

내 Vim 텍스트 편집기의 기본 동작은 o명령 모드에서 키를 누르고 마지막 줄이 주석이면 //...새 줄이 시작된다는 것입니다 //.

주석 줄로 끝나는 파일을 처리하는 방법을 모르겠습니다. 다음과 같이 생각할 수 있습니다. 새 줄에서 시작하는 다음 파일의 내용을 추가하거나 마지막 주석 줄을 제거합니다.

제한사항만 사용할 수 있습니다 bash.

Vim 코드 스냅샷

원자 코드 스냅샷

답변1

파일의 마지막 줄이 개행 문자로 끝나지 않는 것 같습니다. 그렇기 때문에 한 파일의 마지막 줄이 다음 파일의 첫 번째 줄과 병합됩니다.

각 파일 뒤에 줄바꿈을 추가해 볼 수 있습니다.

for file in static/js/*.js
do
    cat "$file"
    echo
done >> main.js

스크립트는 파일이 개행 문자로 끝나는지 확인하지 않습니다. 파일이 개행 문자로 끝나면 그 뒤에 빈 줄이 옵니다.

답변2

조금 이상하게 들릴 수도 있지만 파일이 1로 끝나지 않는 경우 sed에만 파일 사이에 문자를 추가하는 동작을 활용할 수 있습니다.<newline>

sed ';' static/js/*.js >main.js

GNU에서도 작동할 것입니다 sed. 다른 구현에 대해서는 잘 모르겠습니다.

예:

$ printf '%s' line1 >file1
$ printf '%s\n' line2 >file2
$ printf '%s' line3 >file3

$ cat file*
line1line2
line3

$ sed ';' file*
line1
line2
line3

이런 일이 일어나는 이유는,GNU sed문서 인용:

실제로 sed가 종료 줄 바꿈 없이 줄을 인쇄하는 경우 동일한 출력 스트림에 다시 텍스트가 전송되면 여전히 누락된 줄 바꿈을 인쇄하므로 다음과 같은 내용이 나오지 않더라도 "기대하지 않는 놀라움"을 제공합니다. 'sed -n p' 명령은 cat과 완전히 동일합니다.

위 명령은 다음과 같은 결과를 제공합니다.

for file in static/js/*.js; do
    cat "$file"
    # Dump the last byte of each file and check if it is a
    # newline (hex encoding 0a); print a newline if it is not
    [ '0a' = "$(tail -c 1 "$file" | od -A n -t x1 | tr -d ' ')" ] || printf '\n'
done > main.js

마지막 줄을 제외하고, 누락된 경우 a는 마지막 파일에 추가되지 sed ';'않지만 이 루프는 추가됩니다.<newline>

관련 정보