コンテンツにスキップ

コマンドメモ

最終更新日: 2021-07-14

xargs

  • ls -l | xargs echo のようにして手前のコマンドの結果を渡すコマンド

複数回渡す

  • 2 回渡す例
    • ls -la ~ | grep .bashrc | xargs echo {}{}
  • 置換文字を {} 以外にする場合は xargs -I@ とする
    • ls -la ~ | grep .bashrc | xargs echo @@

awk

  • 標準出力をパースして標準出力するコマンド
  • 区切り文字で区切った値を取るのには向くが、正規表現をゴリゴリ書くなら perl 使ったほうが楽

特定列を取得

  • 例として ps aux の実行パスの取得
    • ps aux | awk '{print $11}'

区切り文字を変える

  • 標準では半角スペース
  • カンマにする例
    • awk -F ","

正規表現に一致した次の行を取得

  • awk "/any regexp/{getline; print}"

正規表現の捕獲式を捕獲する

  • awk '{print gensub(/Foo: (.+)/, "\\1", "g")}')

sed

  • どうしても sed である必要がなければ perl を使ったほうが楽
    • sed では基本的に PCRE を扱えない
  • perlsed の代わりに使う方法
    • perl -lpe s/hoge/fuga/
  • オプションの意味合い
    • -l 入力からケツ改行を消す
      CLI 入力するとケツに改行が入るのでそれを除去できる
    • -p 入力行を処理する
    • -e スクリプトを流せる php -r のようなもの

cat

  • cat の表示内容は標準出力
  • cat とヒアドキュメントの合わせ技でファイル作成が可能

ファイル作成

1
2
3
4
5
cat <<EOF > foo.txt
foo
bar
baz
EOF
  • 変数展開を防ぐ場合はヒアドキュメントをクオートで囲む
1
2
3
4
5
cat <<'EOF' > foo.txt
foo
bar
baz
EOF

ファイル追記

  • 追記する場合は tee と組み合わせる
1
2
3
4
5
cat <<EOF | tee -a foo.txt
hoge
piyo
fuga
EOF

tar

  • tar --help をするとやたら長い説明が出てきますがテンプレ部分のみ読解

圧縮編

  • tar -zvcf foo.tar.gz foo
1
2
3
4
z: --gzip, gzip
v: --verbose, 詳細、別になくてもいい
c: --create, アーカイブの新規作成
f: --file, 保存するファイル名

tar -cf だと tarball になると思われる

展開編

  • tar -zxvf foo.tar.gz foo
1
2
3
4
z: --gzip, gzip
x: --extract, 展開
v: --verbose, 詳細、別になくてもいい
f: --file, 展開するファイル名

perl

コマンドラインオプション

  • -e
    • ワンライナーでコードを書くやつ
    • php -rnode -e と同じ
    • Evaluate, Eval, 評価
  • -n
    • 入力の各行に対し処理がかかる
    • $. で行番号、$_ で行の文字列を取得できる
    • while (<>) 相当の処理
  • -p
    • 入力の各行に対し処理を行い、更に print $_ 相当の処理を実行する
  • -l
    • 入力($_)から改行文字を削除し出力に改行を追加する
  • -a
    • 入力の各行に対して awk 相当の文字列分割処理を行う(autosplit mode with -n or -p)
    • 分割した文字は $F に配列として入るので次のようにして取得できる
      • perl -ale 'print "$F[0] - $F[1]'
    • $#F を指定すると分割した個数が取れる
  • -F/pattern/
    • -a で split するパターンを設定する
    • 例えば -F, とすると CSV を分割できる
  • -i[ext]
    • ファイルを編集する
    • 使用例:perl -i -pe 's/aaa/xxx/' foo.txt
    • -i.bak のように指定するとバックアップファイルが作成される
    • このオプションは次に続く文字が解釈されるため、単体で指定する必要がある(-ipe のようには使えない)

構文

  • print
    • 標準出力に出力
    • 単体では print $_ と同じ挙動をする
  • s/foo/bar/
    • foo を bar に置換
  • /(.+)/; print $1
    • キャプチャした内容を出力
  • $_ について
    • 基本的に書かなくても補完される
    • 例えば echo aaabbc | perl -ne 's/c/d/; print' の出力は aaabbd となる

特定行を取得

  • perl -ne 'print if $. == 1'
    • 1 のところが行数なので、ここを変えることで任意の行の文字列を取れる