
while 루프에서 파일의 끝을 어떻게 확인할 수 있는지 궁금합니다. 여기서 내가 하는 일은 "pineapple", "apple", "onion", "orange" 등과 같은 단어가 있는 경우 grep 명령을 사용하여 특정 단어가 포함된 줄을 찾아 주석을 달고자 하는 것입니다. "창문". 예를 들어 를 사용하면 grep 'a' 'file'
"파인애플", "사과", "오렌지"가 검색됩니다. 그런 다음 마지막으로 "파인애플, 창, 사과, 창, 오렌지, 창"과 같이 인쇄하고 싶습니다. 그래서 while이나 for 루프에서 어떤 조건을 만들고 싶습니다. 어떤 도움이라도 정말 감사하겠습니다.
편집: 샘플 입력
apple
banana
pineapple
orange
mandu
ricecake
meat
juice
milk
onion
green onion
grep 명령을 사용할 때 예상되는 출력 -->grep 'a' 'file name'
apple
window
banana
window
pineapple
window
orange
window
mandu
window
ricecake
window
meat
window
답변1
awk 사용
window
일치하는 모든 줄 다음에 인쇄하려면 다음을 수행하십시오 a
.
$ awk '/a/{print; print "window"}' filename
apple
window
banana
window
pineapple
window
orange
window
mandu
window
ricecake
window
meat
window
작동 원리
/a/{...}
정규식과 일치하는 행을 선택합니다 a
. 이러한 각 줄에 대해 중괄호 안의 명령이 실행됩니다.
print
일치하는 내용이 포함된 줄을 인쇄합니다.
print "window"
인쇄합니다 window
.
sed 사용
$ sed -n '/a/{s/$/\nwindow/; p}' filename
apple
window
banana
window
pineapple
window
orange
window
mandu
window
ricecake
window
meat
window
작동 원리
-n
명시적으로 요청하지 않는 한 sed에게 인쇄하지 말라고 지시합니다.
/a/{...}
정규식과 일치하는 행을 선택합니다 a
. 해당 줄의 경우 중괄호 안의 명령이 실행됩니다.
s/$/\nwindow/
개행 문자를 추가하고 window
현재 줄의 끝 뒤에 추가합니다.
p
인쇄물.
답변2
$ grep 'a' file | sed 'a\window'
apple
window
banana
window
pineapple
window
orange
window
mandu
window
ricecake
window
meat
window
이것은 원래 명령을 사용한 다음 GNU의 ("append") 명령을 사용하여 각 결과 줄 뒤에 grep
단어를 추가합니다 (표준에서는 삽입된 텍스트 뒤에 줄 바꿈이 필요 하지만 GNU는 좀 더 관대합니다).window
a
sed
sed
\
sed
또는 GNU만 사용하여 다음을 수행합니다 sed
.
$ sed -n -e '/a/{p;a\window' -e '}' file
apple
window
banana
window
pineapple
window
orange
window
mandu
window
ricecake
window
meat
window
이 sed
표현식은 문자가 포함된 모든 줄을 인쇄 a
한 다음 문자열을 추가합니다 window
.
답변3
쉘 방식은 다음과 같이 사용할 수 있습니다.
while IFS= read -r line || [ -n "$line" ]; do
case "$line" in
*a*) printf "%s\nwindow\n" "$line"
esac
done < input.txt
while IFS= read -r line; do...done < file.txt
이는 파일 읽기, case
특정 문자가 포함된 행과 일치하는 명령문, printf
추가 행 인쇄를 위한 일반적인 루프를 결합합니다 window
.