bash で前のコマンドの引数だけを使用する

コマンドを実行するときに コマンドの前に echo を付けて試してみることがあります。

$ export testfile=dummy.txt
$ echo rm $testfile
rm dummy.txt

この後、echo を消して実行するわけですが !* を使うことで 同じことを簡単に実行できます。

$ export testfile=dummy.txt
$ echo rm $testfile
rm dummy.txt

$ !*
rm $testfile
rm: cannot remove `dummy.txt': No such file or directory

!* には、前に実行したコマンドの「コマンドより後ろのワード」が格納されるため echo の後ろから実行されるわけです。

!^ だと「コマンドより後ろのワード」の先頭、 !$ が「コマンドより後ろのワード」の最後になります。

$ echo 1 2 3 4 5
1 2 3 4 5

$ echo !^
echo 1
1

$ echo 1 2 3 4 5
1 2 3 4 5

$ echo !$
echo 5
5

ちなみに前に実行したコマンド全体は !! に格納されるため !! だけだと、前のコマンドを再実行になります。

$ echo 1 2 3 4 5
1 2 3 4 5

$ !!
echo 1 2 3 4 5
1 2 3 4 5

ちなみに、この「コマンドより後ろのワード」はパイプやリダイレクトも含みます。

$ echo 1 2 3 4 5 > /tmp/test.txt

$ echo !$
echo /tmp/test.txt
/tmp/test.txt

使うときは、ちょっとだけ注意です。

リダイレクトだけで 0バイト上書き

bash では、次のようにリダイレクトだけで 0バイトのファイルを作ることができるようです。

これまではコロンリダイレクトとか /dev/null を使ってました。

$ : > zero.txt
$ cat /dev/null > zero.txt

リダイレクトだけでいけます。

$ > zero.txt

$ ls -l zero.txt
-rw-r--r-- 1 xxxxxx xxxxxx 0 2015-08-19 21:24 zero.txt

シンプルですが、書き間違いと思われそうですね。

手作業中に使用するのには便利で良さそうです。

Excel で範囲の入力中のカーソルキー移動

Excel で範囲の入力中に、カーソル移動して 数字だけを変えたいときがあります。

WRITE_0816_01

そのままカーソルキーを押すと下のように 別のセルを選択してしまい 入力欄の中を移動することができません。

WRITE_0816_02

ここは、通常のセルの入力と同じように [F2] キーを押すと 編集モードになります。

WRITE_0816_03

これでカーソル移動ができるようになります。

ブラウザ上で文字を選択した時の背景色を変える

@ITなど、ブラウザ上で文字を選択した時に背景色が変わるサイトがあります。 今回は、それをやってみます。

CSS で、selection という擬似要素を指定します。 IE でも 9 以降は対応しているみたいですね。

[参考]
::selection - CSS | MDN

こんな感じです。

::-moz-selection {
    background-color: red;
    color: white;
}
::selection {
    background-color: red;
    color: white;
}

Firefox には プレフィックスを付ける必要があります。 あと、次のようにカンマで続けて書くと片方がエラーになって無効になるので 同じ内容ですが 2につ分けて書く必要があります。

これで選択した文字の背景色が変わります。
(見本用に画像になっています)

WRITE_0815_01

ただ背景色を変えるだけじゃなくて 仕掛けを作ることもできます。

次の文字列を選択してみてください。 対応しているブラウザであれば、文字が浮かび上がります。

eI3kOyrpWJQguTQDtftV7w8N2fkHhRKrdTqZeRY6MRNPy2i7J
zGha1UFB9gw821cQz3zVuGSfk91KUq56IeqUdjUvuMIZSBZoS
BU5qsGUUfMHq29tkUfGvvhnYy7fofDNAlMaApA141GLqfgasB
AqNHo6IznJEF7yLmnhCnGx33TdeEFp1QAZawGPjlvFZk23ViR
xIadWlDZ2gRDHkkhRxHNWgjKvghsbTSlxD1eLZAKiFYzef6gQ
DiQNwYvhPc0VDlRZDVN1s0I46UlkOWA8Q52MY8jXFGhvWURdl
7VrrQ9pMARdguzhRMM30dAJ6vgAvFPYyFu78xIYekwvSUSoUV
rwZNaO7q5L2UXEQSEDSTsJzDqZTkPsLF3qlJwVNk9QzIGsKe1
ZtKT7ZK9aEQCoexVfazYzaAEt66zgz0dTQ026kmTNoXtPZpZf
6YuU3tF6Ltz1H4TRFrl2VLSKbbhJ8wyhNBKCIY5nz3kWuUm9d
XSz0HPcFj7Rt6kutpTd3WzAd2xdBtwOWDmsb8w68ksFNYQuEB
t5i9Dxnmpy130oJbWUzqanVR281iwEXdd0Nk3COyFPtqsMApG
y8boq6xvmFrle0HcAaMzxNw7ty4nOYztWqAofnGs6Uy23V9Xf
sfs7VReM8zhTNfzfKhW6CG9jV0a9kwp7ts8gWKItKJ97ijcsw
utTgn39HQqERZHBskYzR3CNJYUtfmRl9nk835duoVBPeKsSQl
ffIuPzWsHU5bOn3NizzK25ZFYLankAURekF8E4zBcpKqR6vCA
FkEi5YuyDuuOm3Z8L6bvugc6f0D6zMEbRukiBqgr6oJLTEiJE

対応しているブラウザじゃない人はゴメンなさい。

SQLite のデータベースファイルのバージョンを確認する

SQLite で作成したデータベースのファイルが SQLite のどのバージョンで作成したかですが file コマンドで確認することができました。 (Ubuntu10.04環境)

$ file database.sqlite2
database.sqlite2: SQLite 2.x database

$ file database.sqlite3
database.sqlite3: SQLite 3.x database

Linux でテキストからランダムに 1行取得する

おひさしぶりです。

cowsay コマンドでランダムに絵柄を変えたいと思っていたんですが、 そのためにはランダムで絵柄を指定する必要があります。

絵柄の一覧は次のようなコマンドで取得できます。

$ cowsay -l | grep -v "^Cow"

ここから、ランダムに 1行取得します。 最初は Bash の配列を使って 次のようにやってました。

$ LIST=(`cowsay -l | grep -v "^Cow"`)
$ FMT=${LIST[$(($RANDOM % ${#LIST[@]}))]}

1行でできないかと調べていたら sort コマンドには -R オプションが あったりすることを知りました。

次のようになりました。

$ cowsay -l | grep -v "^Cow" | sed -e "s/ /\n/g" | sort -R | head -n 1

cowsay と fortune も入れて、これで完成です。

$ fortune | cowsay -n -f `cowsay -l | grep -v "^Cow" | sed -e "s/ /\n/g" | sort -R | head -n 1`

・・・と思っていたら、shuf なんてコマンドもあるようで 次のようになりました。

$ fortune | cowsay -n -f `cowsay -l | grep -v "^Cow" | sed -e "s/ /\n/g" | shuf -n 1`

色々とありますね。

テキスト処理は覚えておくと、開発中のちょっとしたことに使えて便利なので 遊びながら覚えていきたいものです。

Google サイト内検索

Amazonアソシエイト