Bashの小ネタ集です。あるあるからなんじゃそりゃまで、小ネタのパラダイスとなっております。
grep -v "^$"とすれば、空白行を排除できる。
なので、cutコマンドで対応します。
grepの結果も表示されているので、これをうまく排除する必要がある。以下修正版。
要は、戻り値が0とか1になるコマンドならなんでもOKということで、grepは検索結果がヒットすれば行単位で表示するが、表示されないけれど終了ステータスも出力している。grepの場合は、ヒットした場合は0、ヒットしなかった場合は1を返す。
終了ステータスは0が正常、1が異常なので、一般的なif文とは逆のような感じではあるけれど、これはこういうもんです。
findでファイルを引っ掛けて、ファイル名をxargsに渡します。その後、xargsがファイル名を1つずつmvで移動するという寸法です。
mvに渡る引数は常に1ファイル分なので、シェルスクリプトでwhileを回しているような感じ。
xargsに関しては、エンジニアの数だけ使い方があると言っても過言ではない応用の効くコマンドです。
時間指定が少々お茶目(manページで微笑んでください)ですが、iptablesの設定を遠隔で行う時など、設定に失敗するとコネクションが張れなくなるような局面(限定的すぎる・・・)に使うのはどうでしょう。
iptablesはストップすると設定がクリアされるので、SSHを開け忘れたとか、全パケットを破棄するような何時使うのか分からないフィルタリングを設定してしまった場合、筐体が海外にあるとかは絶望的なのでぜひatコマンドでiptables stopをatコマンドに引っ掛けてから設定してテストしましょう。 → Man page of AT
思いついたら書き貯めてを繰り返し、ようやく数が出揃ったので放出。再びネタ集めの日々が始まります。
なんだかな~と思うネタからおおっと思うネタまで玉石混交ですが、探偵ナイトスクープの小ネタ集を目指して頑張ります。
see also:
BASHが好きになる! 13の便利なコマンド
スペースも何もない行をgrepする
grep "^$"
grep -v "^$"とすれば、空白行を排除できる。
bashでsubstr
bashにはsubstrというコマンドはないです。なので、cutコマンドで対応します。
# "abcdefg"から先頭の3文字(abc)を取り出す echo "abcdefg" | cut -c-3 #cut -c1-3でも可 abc # "abcdefg"から4~6文字目(def)を取り出す echo "abcdefg" | cut -c4-6 def # "abcdefg"から1、3、6文字目(acf)を取り出す echo "abcdefg" | cut -c1,3,6 acf # ちなみに指定する順序が違っても出てくる文字列は同じ echo "abcdefg" | cut -c1,6,3 acf # 上を組み合わせてこんな事もできる echo "abcdefg" | cut -c-2,5 abe # こちらも指定の順序ではなく元の文字列の順序に準じる echo "abcdefg" | cut -c5,1-4 abcde
ifの条件
ifの条件部分は[]やtestコマンドだけではなく、色んなコマンドを入れられる。if echo "abcde" | grep "abc"; then echo "true" fi # ただ、上のスクリプトの結果は次のようになる abcde true
grepの結果も表示されているので、これをうまく排除する必要がある。以下修正版。
if echo "abcde" | grep "abc" > /dev/null; then echo "true" fi # 結果 true
要は、戻り値が0とか1になるコマンドならなんでもOKということで、grepは検索結果がヒットすれば行単位で表示するが、表示されないけれど終了ステータスも出力している。grepの場合は、ヒットした場合は0、ヒットしなかった場合は1を返す。
終了ステータスは0が正常、1が異常なので、一般的なif文とは逆のような感じではあるけれど、これはこういうもんです。
xargsで大量のファイルを移動する
引数の数が多すぎてエラーになるほど大量のファイルを移動したい場合は、xargsで一発。find . -name "hoge*" | xargs -I{} mv {} /tmp
findでファイルを引っ掛けて、ファイル名をxargsに渡します。その後、xargsがファイル名を1つずつmvで移動するという寸法です。
mvに渡る引数は常に1ファイル分なので、シェルスクリプトでwhileを回しているような感じ。
xargsに関しては、エンジニアの数だけ使い方があると言っても過言ではない応用の効くコマンドです。
転ばぬ先の杖的なat
atコマンドはcronの影に隠れがちなコマンドですが、根本的に違うのは、1回きりの実行を時限爆弾のように仕込める事。時間指定が少々お茶目(manページで微笑んでください)ですが、iptablesの設定を遠隔で行う時など、設定に失敗するとコネクションが張れなくなるような局面(限定的すぎる・・・)に使うのはどうでしょう。
iptablesはストップすると設定がクリアされるので、SSHを開け忘れたとか、全パケットを破棄するような何時使うのか分からないフィルタリングを設定してしまった場合、筐体が海外にあるとかは絶望的なのでぜひatコマンドでiptables stopをatコマンドに引っ掛けてから設定してテストしましょう。 → Man page of AT
思いついたら書き貯めてを繰り返し、ようやく数が出揃ったので放出。再びネタ集めの日々が始まります。
なんだかな~と思うネタからおおっと思うネタまで玉石混交ですが、探偵ナイトスクープの小ネタ集を目指して頑張ります。
see also:
BASHが好きになる! 13の便利なコマンド
コメント
コメントを投稿