![각 줄에 *가 포함된 파일의 줄을 반복하는 방법](https://linux55.com/image/64871/%EA%B0%81%20%EC%A4%84%EC%97%90%20*%EA%B0%80%20%ED%8F%AC%ED%95%A8%EB%90%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%A4%84%EC%9D%84%20%EB%B0%98%EB%B3%B5%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
약 800줄의 파일이 있습니다. 모든 줄에는 1 * 문자가 포함됩니다.
파일의 줄을 반복해야 하므로 다음과 같은 간단한 for 루프를 사용했습니다.
for i in $(cat file_path); do echo $i; done
불행히도 그것은 작동하지 않았습니다.
다른 파일로 시도하면 루프가 제대로 작동하지만 파일의 줄에 * 문자가 포함되어 있지 않습니다.
이 문제를 어떻게 해결할 수 있나요?
답변1
코드에 몇 가지 문제가 있습니다.
- 떠나다따옴표 없이 변수 및 명령 대체
- 에코 사용모든 변수
while
루프를 사용하여 문제를 해결할 수 있습니다.
while IFS= read -r line <&3; do
{ printf '%s\n' "$line"; } 3<&-
done 3< file
[ -z "$line" ] || printf %s "$line"
알아두어야 할 것은while 루프를 사용하여 텍스트 파일을 처리하는 것은 나쁜 습관으로 간주됩니다.POSIX 셸에서.
답변2
당신은 그것을 사용할 수 있습니다 while
:
while read line; do echo "$line"; done < test.txt
또는 개별 문자를 정의하십시오 IFS
.
SAVEIFS=$IFS; IFS="\n"; for i in $(cat test.txt); do echo "$i"; done; IFS=$SAVEIFS
답변3
다음 형식을 사용해야 합니다.
#!/bin/bash
SAVEIFS=$IFS
while IFS= read -r line <&3
do
echo "$line"
done 3< myfile.txt
IFS=$SAVEIFS
테스트는 다음과 같습니다.
root@debian:/home/mohsen/test/shell# ./linebylibe.sh
ff
dd
gg
tt
tt
ww
ee
내 myfile.txt는 다음과 같습니다.
root@debian:/home/mohsen/test/shell# cat myfile.txt
ff
dd
gg
tt
tt
ww
ee