次の内容を含む crashcourse_test.txt ファイルがあります:
リーリーwhile_read.sh スクリプトの内容は次のとおりです。目的は、上記のファイルの内容を標準入力として使用し、while 読み取りループに渡し、各行の「USA」という文字列を「XXXXXXXXX」に置き換えることです。 sed コマンド経由:
リーリー出力結果は次のとおりです:
リーリー 行 1001 に文字列「USA」が含まれていることがわかります ( はたまたまファイル の最初の行です)。これは置換要件を満たしていますが、結果としてこの行は出力されません。 。
私はそれを正しく出力する方法を知っています。これは echo $line | sed 's/USA/XXXXXXXXX/'
を使用することで実現できます。
しかし、出力の最初の行だけが欠落している理由を知りたいです。標準入力として while を入力した後の最初の行はどこに行くでしょうか?
まず第一に、
sed
の使い方が間違っている可能性があります。パラメータはファイルであり、変数
3 のみが出力されるということは、line
は使用されません。 リーリーループが 1 回だけ実行されることを意味します。つまり、ファイル リダイレクト が実際には
read
の入力として使用されます。 > と input、そしてread
以降のすべてを入力として使用するので、入力の最初の行は使用されません。< crashcourse_test.txt
实际上被作为read
的输入和sed
的输入,并且sed
将read