사용이 간단한 Pastebin 테스트 문자열, 여기서 정규식 패턴을 사용하여 본 마지막 예가 다른 두 줄과 비교하여 두 개의 빈 줄을 제공하는 이유는 무엇입니까? 예제 1과 동일한 결과를 보고 싶습니다. example2에서 example3으로의 유일한 변경 사항은 -l 옵션에서 -n 옵션으로 전환한 것입니다.
**example1**
$ grep -rnw html5uploader
views/layouts/test.ctp:49: src="/js/jquery.html5uploader.min.js<?=$no_cache?>">
views/layouts/test.ctp:52: $("#screenshot").html5uploader(
**example2**
$ grep -rlw .*html5uploader.*
views/layouts/test.ctp
**example3**
$ grep -rnw .*html5uploader.*
(empty line)
(empty line)
"test.ctp" 파일의 Pastebin 콘텐츠:
<!--
<input type="file" name="screenshot" id="screenshot" multiple />
<script type="text/javascript" src="/js/jquery.html5uploader.min.js<?=$no_cache?>"></script>
<script type="text/javascript">
// File upload
$("#screenshot").html5uploader(
{
name: "screenshot",
postUrl: "/bugs/ajax_upload_files"
});
</script>
--> </body>
</html>
답변1
문제는 소스 파일의 DOS/Windows 줄 끝입니다.
아래의 첫 번째 명령은 빈 줄을 생성하는 것처럼 보이지만 두 번째 명령은 그렇지 않습니다.
$ grep -r '.*html5uploader.*'
$ grep -r '.*html5uploader.*' | hexdump -C
00000000 74 65 73 74 2e 63 74 70 3a 09 09 3c 73 63 72 69 |test.ctp:..<scri|
00000010 70 74 20 74 79 70 65 3d 22 74 65 78 74 2f 6a 61 |pt type="text/ja|
00000020 76 61 73 63 72 69 70 74 22 20 73 72 63 3d 22 2f |vascript" src="/|
00000030 6a 73 2f 6a 71 75 65 72 79 2e 68 74 6d 6c 35 75 |js/jquery.html5u|
00000040 70 6c 6f 61 64 65 72 2e 6d 69 6e 2e 6a 73 3c 3f |ploader.min.js<?|
00000050 3d 24 6e 6f 5f 63 61 63 68 65 3f 3e 22 3e 3c 2f |=$no_cache?>"></|
00000060 73 63 72 69 70 74 3e 0d 0a 74 65 73 74 2e 63 74 |script>..test.ct|
00000070 70 3a 09 09 09 24 28 22 23 73 63 72 65 65 6e 73 |p:...$("#screens|
00000080 68 6f 74 22 29 2e 68 74 6d 6c 35 75 70 6c 6f 61 |hot").html5uploa|
00000090 64 65 72 28 0d 0a |der(..|
00000096
0a 0d
위의 바이트 순서를 준수하십시오. 이는 DOS/Windows 줄의 끝을 나타냅니다.
다음은 필수 텍스트를 생성합니다.
$ tr -d '\r' <test.ctp | grep '.*html5uploader.*'
<script type="text/javascript" src="/js/jquery.html5uploader.min.js<?=$no_cache?>"></script>
$("#screenshot").html5uploader(
$("#screenshot").html5uploader(
따라서 문제는 소스 파일 test.ctp에 DOS/Windows 줄 끝이 있어 전체 줄을 인쇄할 때 출력을 덮어쓰게 된다는 것입니다.
파일을 수정하려면 tr -d '\r'
다음 편리한 유틸리티 중 하나를 사용하십시오 .dos2unix
이 문제를 방지하기 위해 어떤 편집기를 사용할 수 있는지에 대한 설명은 다음을 참조하세요."어떤 텍스트 편집기가 Windows 및 Unix 스타일 줄 바꿈을 올바르게 처리합니까?"