約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