- - PR -
grepについて
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-06-12 14:32
いつも拝見させて頂いています。
前回、mvで教えていただいた。 mv `ls | grep -E "(aaa[3-9]|aaa[0-9]{2}+)"` /aaa/old/backup"`date +%Y%m%d`"/ を使用して aaa3〜aaa9 を移動させていました。 今回、aaa1〜aaa17まで数字が増え現在のコマンドでは aaa3〜aaa17 まで表示するようになりました。 今回は aaa1〜aaa16 まで残し、aaa17から移動させたいのですが上記のコマンドに どの様に追加すればよろしいでしょうか? aaa[?-?]の数字を変えてみたり削ってみたりとしてみたのですが解決できませんでした。 よろしくお願いします。 あと、このコマンドは特殊なのでしょうか? どの様に検索してもでてきませんでした。 | ||||||||||||||||
|
投稿日時: 2006-06-12 14:54
(aaa[3-9]|aaa[0-9]{2}+) の部分は、正規表現と呼ばれる記載手法です。 前回の質問ではこの単語が出てなかったみたいですが、 とりあえず正規表現について調べてみたほうがよいかと。 あとは試行錯誤してやるにしても、どう正規表現が展開されてるのかくらいは 把握したほうがいいでしょう。 bash環境なら bash -x を実行後にコマンドを実行すると、どう展開されたかわかる状況になります。 実際には、 grep -E "(aaa[3-9]|aaa[0-9]{2}+)" の部分を修正したものの結果だけ確認していけば十分です。 | ||||||||||||||||
|
投稿日時: 2006-06-12 17:22
Mattunさん、ありがとうございます。
正規表現って言うんですね。初めて知りました。 今、色々と調べてる最中ですが・・・ やっぱりよくわかんなかったり・・・ ここら辺はもうちょっと調べて見ないとわかりませんね。 できましたらまたご報告致します。 | ||||||||||||||||
|
投稿日時: 2006-06-13 02:28
どういうキーワードで検索しようとしたのかわかりませんが、
基本は man grep では? それ以前に、grep(と正規表現)を持ち出さなくてもこの程度の ルールならシェルのワイルドカード展開で十分できそうですが。 | ||||||||||||||||
|
投稿日時: 2006-06-13 10:13
お世話になります〜。
paniponi-xさん ワイルドカード展開を色々調べてみましたが、どの様にすれば良いか よく分かりませんでした。 今回は一応正規表現を使いできたのですが、これで正しいのかがわかりません。 mv `ls | grep -E "(aaa[1][7-9]|aaa[2][0-9]+)"` /aaa/old/backup"`date +%Y%m%d`"/ こんな感じでいいのでしょうか? 一応 aaa17〜20-9 までは表示することができました。 | ||||||||||||||||
|
投稿日時: 2006-06-13 19:47
とりあえず、aaaの後に来る数字部分が二桁なら大丈夫じゃないですかね。 ただ、共通部分はまとめられるのと、一桁の数字ならブラケットで囲む必要は ないので、
とか。数字部分を二桁に限定するために$をつけています。 これがないと aaa171 とかいうファイル名がスルーされます。 で、シェルのワイルドカード展開(グロビング)ですが、
とすると、該当のディレクトリに aaa1 から aaa200 くらいまであったとして
という結果が得られます。bashなら問題なくできますが、純粋なshだと できないかもしれません。 | ||||||||||||||||
|
投稿日時: 2006-06-14 10:13
paniponi-xさん
ありがとうございます。 色々と参考になりました。 ワイルドカード展開についてもまた調べていきたいと思います。 |
1