각 줄에 *가 포함된 파일의 줄을 반복하는 방법

각 줄에 *가 포함된 파일의 줄을 반복하는 방법

약 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

관련 정보