ファイル名から数字を抽出する方法

ファイル名から数字を抽出する方法

別のディレクトリのファイル名から番号だけを取得する方法は?sed awkまたはbash?のみ使用してください。長さに制限はありませんが、フォーマットは常にABC1234であるとします。

私が試したファイル名がある場合ABC1311.crsにのみ必要です1311

number=`awk -F '[]' '{print $2}' $data/ABC123.crs

答え1

これは奇妙な要件のように見えますが、任意のファイル名から数字を抽出するには、パラメータ拡張を使用してファイル名から数字以外のものをすべて削除できます。

for f in *
do
  printf '%s\n' "${f//[![:digit:]]/}"
done

答え2

私は以下を使用しますgrep

grep -Eo '[0-9]+' file.txt

答え3

以下を使用して数値を取得できます。

echo * | grep -o '[[:digit:]]*'

必要echo *に応じて に置き換えることができます。ls

ただ使用したい場合は、awk次のことができます。

\ls | awk 'match($0, /[[:digit:]]+/) {print substr($0, RSTART, RLENGTH)}'

\lsディレクトリ内のすべてのファイルが一覧表示されますが、awk最初の数値セットのみが印刷されます。これは、ファイルに複数の数値文字列が含まれている場合にのみ出力されます(例2043x924_fjnndkk.jpg:)2043

\lsあなたのlsエイリアスが何かについてのものであれば、それを使用してください。それ以外の場合は、通常のエイリアスでls十分です。私の場合、エイリアスlsls -sおよびその他のオプション)を使用してこのコマンドを妨げる寸法は常に印刷されます。

関連情報