Bashスクリプトでファイルを1行ずつ読み取る方法 [3 Methods]

書くとき bash スクリプト。自動化フローによって異なりますが、スクリプトがファイルからコンテンツを1行ずつ読み取る必要がある場合があります。 ここでは、3つの方法を学びます bash ファイルを1行ずつ読み取るスクリプト。

方法1:入力リダイレクタを使用する

ファイルを1行ずつ読み取る最も簡単な方法は、whileループで入力リダイレクタを使用することです。

実例を示すために、「mycontent.txt」という名前のサンプルファイルを作成し、このチュートリアル全体で使用します。

$ cat mycontent.txt
This is a sample file
We are going through contents
line by line
to understand

‘example1.sh’という名前のスクリプトを作成してみましょう。 入力 リダイレクトループ

$ more example1.sh
#!/bin/bash
while read y
do
echo "Line contents are : $y "
done < mycontent.txt

使い方:

-「bash」
-whileループを開始し、行の内容を変数「y」に保存します
-whileループの一部を実行します(開始点)
-echo to printおよび「$ y」は変数値、つまり行を印刷することを意味します
-入力リダイレクタ「<」を使用してファイルの内容を読み取り、完了して閉じる

スクリプトと出力の実行:

$ ./example1.sh

Line contents are : This is a sample file
Line contents are : We are going through contents
Line contents are : line by line
Line contents are : to understand

方法2:catコマンドを使用する

2番目の方法は、catコマンドを使用して、そのコマンドを送信することです。 出力 なので 入力 しばらくの間 ループ を使用して パイプ

次のような内容のスクリプトファイル「example2.sh」を作成します。

$ more example2.sh
#!/bin/bash
cat mycontent.txt | while read y

do
echo "Line contents are : $y "
done

使い方:

-「bash」
-パイプを使用してwhileループに入力として送信されたcatコマンドの出力
「|」 行の内容を変数「y」に保存します
-whileループの一部を実行します(開始点)
-echo to printおよび「$ y」は変数値、つまり行を印刷することを意味します
-whileループの終了が完了しました

スクリプトと出力の実行:

$ ./example2.sh

Line contents are : This is a sample file
Line contents are : We are going through contents
Line contents are : line by line
Line contents are : to understand

ヒント:すべてのコマンドを組み合わせて、ワンライナーとして使用できます。

出力:

$ while read line; do echo $line; done < mycontent.txt
This is a sample file
We are going through contents
line by line
to understand

3.引数として渡されたファイル名を使用する

この3番目のメソッドは、ファイル名をとして送信します 入力引数 コマンドラインから。

‘example3.sh’という名前のスクリプトファイルを次のように作成します。

$ more example3.sh
#!/bin/bash
while read y
do
echo "Line contents are : $y "
done < $1

使い方:

-「bash」
-whileループを開始し、行の内容を変数「y」に保存します
-whileループの一部を実行します(開始点)
-echo to printおよび「$ y」は変数値、つまり行を印刷することを意味します
-コマンドライン引数からファイルの内容を読み取ります。つまり、入力リダイレクタ「<」を使用して$ 1を読み取り、doneで閉じます。

スクリプトと出力の実行:

$ ./example3.sh mycontent.txt 

Line contents are : This is a sample file
Line contents are : We are going through contents Output of Script
Line contents are : line by line
Line contents are : to understand

バックスラッシュとエスケープ文字の処理

ファイルの内容に円記号とエスケープ文字が含まれている場合、読み取りコマンドはそれらの円記号とエスケープ文字を無視するために使用されていました。

ファイルからすべてを読み取りたい場合は、 -r バックスラッシュエスケープが解釈されてコンソールに値が表示されないようにするオプション。

ファイルコンテンツにコンマやパイプなどのファイルセパレータがある場合は、IFS(Internal Field Separator)を使用して、区切り文字に基づいてファイルを分割し、値を表示できます。

シェルスクリプトの例:

#!/bin/bash
inputfile="foobar.txt"
while IFS=, read -r y
do
echo $y
done < $inputfile

スクリプトフロー:

-ファイルパスを「inputfile」変数に割り当てます
-whileループはファイルを1行ずつ読み取ります
— rは、円記号のエスケープが解釈されないようにします
-IFS(Internal Field Separator)、フィールドセパレータで行を分割する場合は、区切り値を指定する必要があります(例:行に「foo、bar」などの値があり、カンマを分割する場合、IFS値は( IFS =、))
–echoは、コンテンツをコンソールに印刷するのに役立ちます
-ループが発生している間にファイルの終わりに達すると

結論

このチュートリアルでは、を使用してファイルの内容を1行ずつ読み取る方法について説明しました。 bash 例を含むシェルスクリプト。 行を個別に読み取ることにより、ファイル内の文字列を検索するのに役立ちます。

読んでくれてありがとう、コメントセクションにあなたの提案とレビューを残してください。