ファイルが多い
101s18-exam02--100-booklets.pdf
MATH232 Exam 01 99 booklets.pdf
35BOOKLETS.pdf
各ファイルから「小冊子」という単語の前に現れる数字を抽出するコマンドを作成したいと思います(大文字と小文字を無視)。したがって、このコマンドを実行すると、結果は次のようになります。
$ bash mycommand.sh 101s18-exam02--100-booklets.pdf
100
$ bash mycommand.sh MATH232 Exam 01 99 booklets.pdf
99
$ bash mycommand.sh 35BOOKLETS.pdf
35
どうすればいいですか?
ベストアンサー1
grep
この-o
フラグを知っている実装を使用して、次のようにしますtr
。
#!/bin/sh
printf '%s\n' "$@" | grep -oiE '[0-9]+[^0-9]*booklets' | tr -dc '0-9\n'
これはスクリプトです(動作しますがスクリプトsh
ではありません)。コマンドラインから渡された文字列にリテラル改行文字が含まれていないとします。bash
bash
拡張正規表現はandなどの文字列[0-9]+[^0-9]*booklets
と一致し、これは正確にそれから返されます。数字または改行文字を除く出力のすべての項目を削除します。<integer><zero or more non-digit characters><"booklets">
-o
grep
tr
grep
文字列から数字ではなく、最初の文字内のすべての内容を削除するtr
ことで置き換えることができます。sed 's/[^0-9].*//'
テストしてみてください:
$ sh script.sh 101s18-exam02--100-booklets.pdf
100
$ sh script.sh "MATH232 Exam 01 99 booklets.pdf"
99
$ sh script.sh 35BOOKLETS.pdf
35
$ sh script.sh 101s18-exam02--100-booklets.pdf "MATH232 Exam 01 99 booklets.pdf" 35BOOKLETS.pdf
100
99
35
スペースを含む文字列は引用符で囲む必要があります。