web-dev-qa-db-ja.com

文字列の最初の単語を取得する方法は?

私がecho *次の出力が表示されます。

file1 file2 file3 ...

私が欲しいのは最初の言葉を選ぶことです。どうすれば続行できますか?

51
vdegenne

あなたはそれをawkにパイプして、最初の単語をエコーさせることができます

echo * | head -n1 | awk '{print $1;}'

または、文字列を切り取って最初の単語を選択します。

echo *  | head -n1 | cut -d " " -f1

または、sedを徹底的にパイプし、最初のWord以外のすべてを削除させる

echo * | head -n1 | sed -e 's/\s.*$//'

Nitpickersを満たすために| head -n1を追加しました。文字列に改行が含まれている場合、重要なコマンドが渡された文字列から最初の単語を選択する前に、| head -n1は最初の行を最初に選択します。

63
Bananguin

Posixyシェルを想定(/bin/shまたは/bin/bashはこれを実行できます)

all=$(echo *)
first=${all%% *}

コンストラクト${all%% *}は、substring Removalの例です。 %%は、変数allの右端から*(スペースの後に何かが続く)の最長一致を削除することを意味します。文字列操作の詳細については、 ここ を参照してください。

このソリューションは、セパレーターがスペースであることを前提としています。ファイル名を使用してこれを実行している場合、スペースが含まれていると壊れます。

25
starfry

最初のfilenameではなく、最初のWordが本当に必要だと仮定すると、空白で壊れない方法は次のとおりです。

shopt -s nullglob
files=(*)
printf '%s\n' "${files[0]}"
9
Chris Down

位置パラメータを使用できます

set -- *
echo "$1"
6
glenn jackman

次の選択肢のいずれかを確認します。

$ FILE=($(echo *))
$ FILE=$(echo * | grep -o "^\S*")
$ FILE=$(echo * | grep -o "[^ ]*")
$ FILE=$(find . -type f -print -quit)

その後、echo $FILE

参照: grep出力からの最初の単語は?

3
kenorb

これは機能します:

echo * | grep -o "^\w*\b"

https://unix.stackexchange.com/a/57879/392 への信用

2
Alexander

最初のファイル名全体を取得する:

shopt -s nullglob
printf '%s\000' * | grep -z -m 1 '^..*$'
printf '%s\000' * | ( IFS="" read -r -d "" var; printf '%s\n' "$var" )
1
markle