ようへい

2020年2月20日木曜日

bash スクリプトでよく使うコマンドまとめ

スクリプトを動的に作る

$ cat <<'EOF' >/tmp/hogehoge.rb
xxx
EOF
あまり使わないけど、docker で自動的に環境構築するときとか、シェルからはできないような操作をする際に使ったり。

echo で色つけて出力

色・装飾つき echo コマンドメーカー

sed で置換

$ sed -i -e 's;fuga;bar;' \
    -e '/^hoge/s/=false/=true/' \
    /tmp/hoge.conf
sed の正規表現で気を付けるのは、-e 's;h+;HOGE;' と書いてしまうとダメ。
拡張正規表現を使うためには、対象のメタキャラクタをエスケープする。-e 's;h\+;HOGE;' という感じ。
よくハマる。

grep で抽出

$ echo "hoge=fuga" | grep -o "fuga"
fuga
これでもいいのだが、Perl の正規表現を使うようにして
$ echo "hoge=fuga" | grep -Po "=\K(fuga)"
こんな感じで使うほうが好き。

大量のファイルに何かをする

$ find <検索条件> -print0 | xargs -0i sh -c "echo {}; basename {}"
ポイントとしては、-print0 で null 区切りにすること。
こうすることで、ファイルパスに含まれる空白などが悪さをしなくなり xargs が正しく処理できる。
なお、-exec は制限あるので極力使わない。

ls の日付フォーマットを変更

$ ls -l --time-style=+%Y-%m-%d\ %H:%M:%S
加工するときとかに使う。

バイナリファイルのダンプ

$ od -tx1z <ファイルパス>
ファイルの中に制御文字入ってないかとか見るときに使ったり。

指定サイズのデータ作成

ランダムデータ
$ dd if=/dev/urandom of=random_data bs=1073741824 count=4
ddは2GB以上のブロックサイズを指定できないため、4GBを作る場合は1GBx4等で対処する
固定データ
$ printf "%01048576d" > 1MB.txt
0で埋まったファイルが作られる。

あるファイルが、どの rpm によりインストールされたか調べる

$ rpm -qf <ファイルパス>

rpm の中身を見る

未インストールの rpm
$ rpm -pql <rpmファイルパス>
インストール済みの rpm
$ rpm -ql <rpm名>
関連記事

色・装飾つき echo コマンドメーカー

シェルを書いてると、エラーや大切なメッセージを色や装飾つきで表示したくなることありますよね。
そんなとき、面倒な色のコードや、テキスト装飾の属性を調べるのが面倒だったのでつくりました。
色は 16bit カラーに限定しています。
点滅はブラウザが非対応なのでプレビューで意図的に再現してません。また、ほかにも装飾があったり色があったりしますが、省略しています。
必要な方はググってください。
なお、Macのターミナルの場合は、echo -e $'xxxx'のように、クォートの前に$を入れないと色が付きません。
Macターミナル対応
$ {{ echoCommand() }}
{{ echoText }}
コマンドをコピー
クリア
関連記事