「シェルプログラミング」の版間の差分
ナビゲーションに移動
検索に移動
(→特殊ファイル) |
|||
(同じ利用者による、間の2版が非表示) | |||
1行目: | 1行目: | ||
+ | | [[Programming C]] | [[Linux]] | [[Cygwin]] | [[Linux コマンド]] | | ||
==[[シェルプログラミング]]== | ==[[シェルプログラミング]]== | ||
− | |||
これらの本からの覚書。 | これらの本からの覚書。 | ||
36行目: | 36行目: | ||
===文字列の検索と置換=== | ===文字列の検索と置換=== | ||
*当初から存在していた、grep(POSIXのBRE:Basic Regular Expressionsに対応)、拡張された、egrep(ERE:Extended Regular Expressionsに対応)、正規表現に対応しない代わりに、高速な固定検索をおこなう、fgrepが、歴史的な経緯で存在しているが、1992年のPOSIX標準で、grepに統合され、オプションで切り替えられるようになった(現実的には削除されずに残っている) | *当初から存在していた、grep(POSIXのBRE:Basic Regular Expressionsに対応)、拡張された、egrep(ERE:Extended Regular Expressionsに対応)、正規表現に対応しない代わりに、高速な固定検索をおこなう、fgrepが、歴史的な経緯で存在しているが、1992年のPOSIX標準で、grepに統合され、オプションで切り替えられるようになった(現実的には削除されずに残っている) | ||
+ | ====[[正規表現]]==== | ||
==[[シェルプログラミング 変数|変数]]== | ==[[シェルプログラミング 変数|変数]]== | ||
51行目: | 52行目: | ||
==[[Tips]]== | ==[[Tips]]== | ||
+ | ===grepで対象のファイル数が多く argument list too longとなる場合=== | ||
+ | *NG | ||
+ | <pre> | ||
+ | $ grep "hoge" * | ||
+ | -bash: /usr/bin/grep: Argument list too long | ||
+ | </pre> | ||
+ | *書き換え | ||
+ | <pre> | ||
+ | $ echo * | xargs grep "hoge" | ||
+ | </pre> | ||
===複数ファイルを処理=== | ===複数ファイルを処理=== | ||
*ディレクトリのファイルをまとめて解凍 | *ディレクトリのファイルをまとめて解凍 |
2020年10月29日 (木) 14:09時点における最新版
| Programming C | Linux | Cygwin | Linux コマンド |
目次
シェルプログラミング
これらの本からの覚書。
ソフトウェアツールの開発理念
詳解シェルスクリプト イントロダクション
- 一つのことをしっかりやる
- バイナリデータではなく文字列を扱う
- 正規表現を使う
- 特に指定がなければ標準入力と標準出力を使う
- 余計な出力は行わない
- 入力データと同じ形式で処理結果を出力する
- 一つのプログラムで全てをこなそうと思わない
- ツールをどんどん作る
基本
リダイレクトとパイプ
- < を使って標準入力を変更する
- > を使って標準出力を変更する
- >> を使ってファイルに追記する
- | を使ってパイプラインを作る
特殊ファイル
/dev/null
- ビットバケツ(bit bucket) と呼ばれる
- このファイルに送られるデータは全て削除される
- データを読み込むと、常にファイル終端文字が返される
/dev/tty
- プログラムが実行された端末にリダイレクトされる
- パスワードなど必ず手入力して欲しい場合などに便利
文字列の検索と置換
- 当初から存在していた、grep(POSIXのBRE:Basic Regular Expressionsに対応)、拡張された、egrep(ERE:Extended Regular Expressionsに対応)、正規表現に対応しない代わりに、高速な固定検索をおこなう、fgrepが、歴史的な経緯で存在しているが、1992年のPOSIX標準で、grepに統合され、オプションで切り替えられるようになった(現実的には削除されずに残っている)
正規表現
変数
条件
制御
リスト
関数
コマンド
Tips
grepで対象のファイル数が多く argument list too longとなる場合
- NG
$ grep "hoge" * -bash: /usr/bin/grep: Argument list too long
- 書き換え
$ echo * | xargs grep "hoge"
複数ファイルを処理
- ディレクトリのファイルをまとめて解凍
#!/bin/sh for f in `ls *.zip` do unzip $f done
日付
書式
+で書式設定
# date +%Y%m%d%H%M%S 20130817093545
スクリプト中で使う
sufix=`date +%Y%m%d%H%M%S` echo $sufix
© 2006 矢木浩人