0

私は1つのシェルスクリプトを書き込もうとしています。

  1. '拡張子が.txtのファイル'などの条件に一致するすべてのファイルを一覧表示してから
  2. そのリストから最初のファイルを選択します

ls *.txt変数に保存されたコマンドを使用して、拡張子が.txtのすべてのファイルを一覧表示することができました。私のシェルスクリプトは次のようになります

#!/bin/bash

all_text_files=`ls *.txt`
echo $all_text_files

私のシステムでは、次の出力が得られます

sample_text_file_1.txt sample_text_file_2.txt sample_text_file_3.txt sample_text_file_4.txt sample_text_file_53.txt

ご覧のとおり、すべてのファイルは1つのスペースで区切られています。ここで、最初のファイル、つまりsample_text_file_1.txtファイルを選択してから、そのファイルを読み取ります。

私はシェルスクリプトプログラミングにまったく慣れていないので、シェルスクリプトでこれを行う方法がわかりません。他のプログラミング言語では、単一のスペース文字で正規表現を使用して文字列を分割し、結果のリストから最初の項目を選択できます。

助けてください。

4

4 に答える 4

1

これを試して :

パイプを使用せず、組み込みのみを使用して配列を使用する:bash

array=( *.txt )
echo "${arrray[0]}"

printfandの使用head(改行を含むファイル名は許可されていませんが、非常にまれです)

printf -- '%s\n' *.txt | head -n 1

使用:

printf -- '%s\n' *.txt | sed -n '1p'
于 2013-03-19T08:24:18.920 に答える
0

head最初の出力行を取得するために使用します。

ls *.txt | head -n 1

ただし、ls特別な理由がない限り、その出力を使用および解析しないでください(たとえば、ある基準でファイルをソートし、最初の基準を取得する場合)。

于 2013-03-19T08:25:15.467 に答える
0

lsの出力を解析することは安全ではないので、実行しないでください。

ファイルを配列に格納し、次のように最初の要素を選択します。

arr=( *.txt )
echo "${arr[0]}"
于 2013-03-19T08:27:51.373 に答える
0

Awkにsplitは非常に強力な機能があります。

awk 'BEGIN{split ("file1 file2 file3", files, " "); print files[1]}'
于 2013-03-19T08:31:36.687 に答える