텍스트 파일에서 특정 줄을 인쇄하기 위해이 솔루션을 보았습니다.
sed '123!d;q' file
이 경우 첫 번째 입력 줄 후에 sed가 종료되지 않는 이유는 무엇입니까?
답변
영어로이 sed
프로그램의 의미는 다음과 같습니다.
- [
123!
] 현재 줄 번호가 123이 아닌 경우 [d
]는 현재 줄을 삭제하고 다음 사이클을 시작합니다 (즉, 다음 줄로 이동). - 그런 다음 (
d
명령이 실행되지 않은 경우에만이 지점에 도달합니다. ) [q
]는 더 이상 줄을 처리하지 않고 종료합니다 (그러나 죽어가는 선에 현재 줄을 인쇄합니다).
또는 원하는 경우 쉘 구문에서 :
line_number=0
while IFS= read -r pattern_space; do
line_number=$(($line_number+1))
if [ $line_number -ne 123 ]; then # 123!
continue # d
fi
echo "$pattern_space"; break # q
echo "$pattern_space" # implicit final print (never reached)
done