KobayashiRui
11/21/2017 - 1:26 AM

bash

bashの便利なものをひたすら書いていく

ファイルに書き込む方法

リダイレクト

echo "hello,world" > ファイル
注意このリダイレクトだと書き込み先に権限が必要な場合書き込むことができない
ちなみに、sudoを前につけても意味ない

echoのオプション

  • -e : 改行を表示する => 改行させたい場合文字列の中に\nをいれると改行になる
    注意 bashの場合-eは意味がなく""で囲めばエスケープを認識してくれる

  • -n : 通常echoコマンドで出力すると出力文字の最後に改行するため、もう一度echoを呼ぶと次の行頭に表示されるが、その機能をオフにするもの

teeを使用する

権限が必要なファイルに書き込む場合に使用する
echo "hello,world" | sudo tee ファイル

teeのオプション

  • -a : ファイルの上書きを禁止する=>追記したい場合はこれを忘れない
  • -i : 割り込みシグナルを無視する
  • --help : teeコマンドの使用方法を表示する

sortコマンドでよく使えるもの

ある列の数値で並び替え

sort -n -k n,n テキストデータ

-kの後に列番号を入れる -rをつければ順番を逆にできる

sedコマンドで使うものまとめ

asciiに非対応のものを削除する

sed -e "s/[^\x00-\x7E]/ /g"

連続したスペースを一つにまとめる

sed -e "s/\s+/ /g"

ワイルドカード

  • ? : 任意の1文字
    • : 任意の文字列
  • [set] : setに含まれている文字
  • [!set] : setに含まれていない文字

[set]について

  • [a-c] : a,b,cのいずれか
  • [a-z] : 小文字アルファベットすべて
  • [!0-9] : 0から9以外の文字
  • [a-zA-Z] : 小文字と大文字のアルファベットすべて

ブレース展開

{}で囲むことで順番に実行される
ex)

echo b{ed,olt,ar}s
>>> beds bolts bars

データフィルタリング

  • cat : 入力を出力にコピーする
  • grep : 入力に対し文字列を検索する
  • sort : 入力に対し行を並べ替える
  • cut : 入力に対し列を取り出す
  • sed : 入力に対し編集操作を実行する
  • tr : 入力に対し文字を他の文字に置換する

バックグラウンドジョブ

コマンドの後ろに&をつける

バックグラウンドジョブの確認

jobs

ジョブの優先度

nice コマンド

でコマンドを実行することで優先度を変更できる

クォーティング

特殊記号が含まれるものを文字列として扱いたい時は'(シングルクォーテーション)で囲む

(注)いれこになっている場合はうまくいかない

良くない例
echo 'Hatter\'s tea party'

問題ない例
echo 'Hatter'\''s tea party'

バックスラッシュエスケープ

特殊記号の手前に**をつけることで文字列として扱える

特殊記号を引数でもらうコマンドには混乱を避けるためシングルクォーテーションで囲む(findなど)

履歴

履歴リストがシェルを終了するたびに.bash_historyに保存される
環境変数HISTFILEを設定するとこのファイル名を自由に変更できる

イベント記号

  • ! : 履歴の置換を開始する
  • !! : 最後のコマンドを参照する
  • !n : コマンドラインnを参照するhistoryで確認
  • !-n : 現在のコマンドラインからnを引いたコマンドラインを参照する
  • !string : stringで始まる最後のコマンドを参照する
  • !?string? : stringを含んでいる最後のコマンドを参照する(最後の?はオプション)
  • string1string2 : 最後のコマンドのstring1をstring2に置換したうえで、最後のコマンドを繰り返す