各行に*を含むファイルの行を繰り返す方法

各行に*を含むファイルの行を繰り返す方法

約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

関連情報