텍스트 파일에서 특정 줄을 인쇄하기 위해 다음 솔루션을 발견했습니다.
sed '123!d;q' file
이 경우 첫 번째 입력 줄 이후에 sed가 종료되지 않는 이유는 무엇입니까?
답변1
영어로 이 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