grepで複数の項目を除外

表題の通り。たまに忘れてどうやるんだっけ?となるのでメモしておく。

■ 環境

  • Linux

■ grep

1つのキーワードを除外するには下記のようにする。

$ grep -v [keyword] [対象ファイル]

さらにキーワードを除外したい場合はパイプ(`|`)で並べたりする。が、少ないときで手っ取り早くやりたいだけの時。

$ grep -v [keyword1] [対象ファイル] | grep -v [keyword2]

キーワードが少ない場合はこれでも良いが、パイプを並べるのも性能的にどうなのであろう?というのもあり一度の`grep`で完結させたい。

$ grep -v -e [keyword1] -e [keyword2] -e [keyword3] [対象ファイル]

という使い方もできる。除外したいキーワードが多い場合にはこれが良いような気がする。

以上。

AmazonLinuxのホスト名を変更

表題の通り。

■ 環境

  • Amazon Linux

■ hostname

デフォルトだとPrivateIPのアドレスを”-“で繋げたホスト名になっているが、対象が増えてくるとこれでは把握しづらい時があり、ホスト名を変更したい。親切にドキュメントが用意されている。

Linuxインスタンスのホスト名の変更
http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/set-hostname.html

再起動をかけたくないので、自身の場合は下記で反映させてしまう。

$ sudo hostname webserver

別のターミナルでSSHログインした時には既にホスト名が変わっているはずである。

以上。

■ 関連

Ubuntuのホスト名を変更

末尾ひとつ前のフィールドを取得

`awk`で表題の通り。

■ 環境

  • awk 3.1.7
  • CentOS 6.7

■ awk

`awk`で末尾のフィールドの値を取得することがある。例えば下記のようなCSVである場合。

$ cat test.csv
1,aaa,bbb,ccc
2,aiueo,aiueo,aiueo
3,test1,test2,test3
$
$ awk -F, '{print $NF}'
ccc
aiueo
test3
$

フィールド数を取得できる”NF“と”$“で末尾の値を取得している。フィールド数がそれほどなければ末尾ひとつ前のフィールドの値もわかりやすいが、これ何番目だ?と数えるのが億劫な場合は下記で取得することができる。

$ awk -F, '{print $(NF-1)}' test.csv
bbb
aiueo
test2
$

以上。

shuf

表題のコマンドを知ったのでメモ。

■ 環境

  • Amazon Linux

■ shuf

どのパッケージに入っているのか確認。

$ which shuf
/usr/bin/shuf
$ rpm -qf /usr/bin/shuf
coreutils-8.22-15.52.amzn1.x86_64
$

ヘルプを見てみる。

$ shuf --help
使用法: shuf [OPTION]... [FILE]
または: shuf -e [OPTION]... [ARG]...
または: shuf -i LO-HI [OPTION]...
Write a random permutation of the input lines to standard output.

Mandatory arguments to long options are mandatory for short options too.
  -e, --echo                treat each ARG as an input line
  -i, --input-range=LO-HI   treat each number LO through HI as an input line
  -n, --head-count=COUNT    output at most COUNT lines
  -o, --output=FILE         write result to FILE instead of standard output
      --random-source=FILE  get random bytes from FILE
  -r, --repeat              output lines can be repeated
  -z, --zero-terminated     end lines with 0 byte, not newline
      --help     この使い方を表示して終了する
      --version  バージョン情報を表示して終了する

ファイルの指定がなかったり, - であった場合, 標準入力から読み込みます.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
shuf の翻訳に関するバグは <http://translationproject.org/team/ja.html> に連絡してください。
完全な文書を参照する場合は info coreutils 'shuf invocation' を実行してください。
$

実際に試してみる。10から20の間の数をシャッフルする。

$ shuf -i 10-20
13
17
20
10
15
12
18
14
11
19
16
$

なるほど。ではこの中から1つを表示。

$ shuf -i 10-20 -n 1
14
$ shuf -i 10-20 -n 1
19
$ shuf -i 10-20 -n 1
11
$

実行する毎にランダムにシャッフルした結果の1つを取得できる。単純にランダムな数値を欲しい時に使えそうだ。

以上。

対象でコマンド実行

Ansibleにおいて、Inventoryfileで指定したホスト全台に対してコマンドを実行したい。普段はplaybookを使用したり”-m ping“とかしか使ったことがなかったのでメモ。

■ 環境

  • Ansible 2.2.1.0

■ ansible

下記のようにやると全台に対してコマンドを実行することができる。例として`apt-get update`してみた。

$ ansible all -m shell -a "sudo apt-get update"

-m apt“でも実行が可能なのかもしれない。が、手っ取り早くはこれで良いであろう。

以上。

■ 関連

初めてのAnsible