while 루프에서 파일의 끝을 확인하는 방법을 알고 싶습니다. 여기서 내가 하고 있는 일은 "pineapple", "apple", "onion", "orange" 등과 같은 단어가 있는 경우입니다. grep 명령을 사용하여 특정 단어가 포함된 줄을 찾고 "windows"에 대한 설명을 만들고 싶습니다. . 예를 들어 를 사용하면 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
행을 인쇄하는 명령문을 결합합니다.