書くとき 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 例を含むシェルスクリプト。 行を個別に読み取ることにより、ファイル内の文字列を検索するのに役立ちます。
読んでくれてありがとう、コメントセクションにあなたの提案とレビューを残してください。