grep 명령을 사용하여 공백과 개행 문자가 포함된 문자열을 선택할 수 있는지 궁금합니다. 예를 들면 다음과 같습니다.
Hello
I
am
here right now
저는 아직 정규식과 일반적인 명령줄 사용에 익숙하지 않기 때문에(이것을 배우는 지 이틀째입니다), 제가 시도한 것은 다음과 같습니다.
grep H[\s\S]*w <filename>
나는 [\s\S] 가 . 와는 달리 공백과 줄 바꿈을 포함한 모든 문자를 제공할 것이라고 생각했지만 작동하지 않습니다.
저는 Mac OS에서 터미널을 사용하고 있습니다(이것이 중요한지 확실하지 않음).
답변1
grep
온라인으로 작업하세요."당신은 그렇게 할 수 없습니다"bash
; 하지만 이런 일을 해야 할 때는기분이 안 좋아/할 수 없다또는 유사한 것을 사용하여 perl
(또는 솔직히 말해서 그냥 사용하고 싶었습니다 grep
) 저는 다음과 같이 했습니다:
tr '\n' '\a' < <filename> | grep --only-matching Hello$'\a'I$'\a'am$'\a'here\ right\ now | tr '\a' '\n'
tr
여기서는 문자를 번역합니다.새 줄도착하다벨 ASCII 문자 [16진수 코드\x07 또는 '\a']를 입력한 다음 처리합니다 grep
( grep
여기서 긴 한 줄 문자열 이 표시됩니다.벨 ASCII 문자바꾸다새로운 팀문자) 그런 다음 "일반"으로 돌아가 번역합니다.벨 ASCII 문자도착하다새로운 팀.
사용할 필요가 없습니다벨 ASCII 문자: 파일에 나타나지 않는 문자를 사용할 수 있습니다. 제 경우에는 숫자 7을 좋아하고 일반적으로 텍스트 파일에는 어떤 문자도 포함되지 않습니다.벨 ASCII 문자
지금: $'\a'
예배쉬 ANSI-C 인용문
답변2
이 시도:
sed -e '1h;2,$H;$!d;g' -re 's/(.*)(H\w+\n)(.*w\n)(.*)/\2\3/' test.txt
test.txt 파일에는 다음이 포함됩니다.
Something
Hello
I
am
here right now
Something else
테스트 목적으로 sed (GNU sed) 4.4
Homebrew를 통해 macOS에 GNU sed를 설치할 수 있습니다. macOS의 기본 sed는 약간 다른 옵션이 있는 BSD sed입니다.
건배,