교과서에서 이 코드를 보았는데, 책에서는 1,/^[ ]*$/d
"1번째 줄부터 첫 번째 빈 줄까지 삭제"를 의미한다고 말했습니다. 각 문자의 구체적인 의미는 무엇입니까?
ed $1 << EOF
1,/^[ ]*$/d
w
q
EOF
답변1
1,/.../
첫 번째 줄부터 사이의 패턴과 일치하는 줄까지의 범위를 나타냅니다 /
.
/^[ ]*$/
[ ]*
^
줄의 처음부터 끝까지 0 또는 공백이 포함된 줄을 찾습니다 .$
문제의 코드가 의도적인 것인지, 책의 정확한 사본인지는 불분명합니다. 단일 공백 주위에는 괄호가 필요하지 않습니다. 어쩌면 원저자는 문자 클래스로 대체될 수 있는 괄호 사이에 공백과 탭을 원했을 수도 있습니다 [[:blank:]]
.
d
줄을 삭제하는 명령입니다
w
파일 쓰기
q
편집기 종료
이 명령은 ed
통과합니다.여기 문서, 로 표현됩니다 << EOF
. 이 문자열은 아래의 다른 네 줄과 쌍을 이루는 반임의적인 이름입니다 EOF
. EOF
따옴표가 없으면 EOF
중간 줄의 모든 변수가 확장된다는 의미입니다.
여기서 주목해야 할 또 다른 점은 예제가 인용되지 않았다는 것입니다 $1
. /script 명령은 ed
첫 번째 위치 인수(스크립트 또는 함수에 대한 인수)에 대해 실행됩니다.추가 공백 분할 및 파일 이름 생성의 영향을 받음. 이 주장은 실제로 인용되어야 합니다. 자세한 내용은 다음을 참조하세요.공백이나 기타 특수 문자 때문에 쉘 스크립트가 멈추는 이유는 무엇입니까?그리고bash/POSIX 쉘에서 변수를 인용하는 것을 잊어버리는 보안 위험.
답변2
명령 및 입력
은 $1
편집할 파일의 이름이고 EOF 사이의 모든 내용은 입니다 ed
.
블로우 바이 블로우에 대한 설명1,/^[ ]*$/d
1,
줄부터 시작하다1
이 경우 검색 문자열이 처음 나타날 때까지 계속됩니다./
문자열을 검색하고 싶다는 것을 나타냅니다.^
파일의 줄 시작 부분과 일치시키려는 것을 의미합니다.[
많은 문자를 지정한다는 의미입니다.- '
' 우리는 공백을 일치시키고 싶습니다. 일반적으로 여기에는 더 많은 문자가 있습니다.
]
지정된 문자를 완성하세요*
[]
0개 이상의 공백(또는 사이의 모든 문자 ) 을 일치시키려고 합니다.$
파일의 줄 끝까지/
검색 닫기d
이 줄 삭제
그런 다음 다음 줄에서 w
변경 사항을 기록한 다음 q
종료됩니다 ed
.
영향
파일의 첫 번째 줄( )이 비어 있거나 $1
공백(탭 없음)만 있으면 삭제됩니다.