Skip to content

Instantly share code, notes, and snippets.

@doloopwhile
Last active December 20, 2015 14:59
Show Gist options
  • Save doloopwhile/6150601 to your computer and use it in GitHub Desktop.
Save doloopwhile/6150601 to your computer and use it in GitHub Desktop.
〇〇によるワンライナー7つ
  1. 要素を取り出してフォーマットする(sed)

入力:

# 言語名 コマンド名 バージョン番号
echo -e "\
Perl\tperl\t5.14.2
Python\tpython\t2.7.3
Ruby\truby\t1.9.3p194
PHP\tphp\t5.4.6-1
AWK\tawk\t4.0.1" > /tmp/langs

###ワンライナー:

# "コマンド-バージョン番号" に変換
cat /tmp/langs | sed -e 's/\([^\t]*\)\t\([^\t]*\)\t\([^\t]*\)/\2-\3/'

出力:

perl-5.14.2
python-2.7.3
ruby-1.9.3p194
php-5.4.6-1
node-0.6.19
  1. タブ以外の区切りを使う

入力:

# CSVファイル
echo "\
name,price_per_100g,weight
pork,99,1200
beaf,120,1400
chicken,68,2300" > /tmp/meats.csv

###ワンライナー:

# 肉の種類と重さを出力
cat /tmp/meats  | cut -d , -f 1,3

出力:

name,weight
pork,1200
beaf,1400
chicken,2300
  1. 正規表現にマッチした行を出力する

入力:

# 言語名 コマンド名 バージョン番号
echo -e "\
Perl\tperl\t5.14.2
Python\tpython\t2.7.3
Ruby\truby\t1.9.3p194
PHP\tphp\t5.4.6-1
AWK\tawk\t4.0.1" > /tmp/langs

###ワンライナー:

# 言語名にhを含む言語の行を出力
cat /tmp/langs | grep --ignore-case -E "^[^   r]*r[^  ]*      "

出力:

Perl	perl	5.14.2
Ruby	ruby	1.9.3p194
JavaScript	node	0.6.19
  1. 正規表現のマッチを置換する(sed)

入力:

echo "\
float pi(void);
int floor(float x);
pi() + bar(2.5);

void printf(char* format, ...);
printf("%s", 0);
" > /tmp/code

###ワンライナー:

# C言語風の宣言を、C++0x風の後置型の宣言に
cat /tmp/code | sed -e 's/\([a-z]\+\)[[:space:]]\+\(.*\);/auto \2 -> \1;/'

出力:

auto pi(void) -> float;
auto floor(float x) -> int;
pi() + bar(2.5);

auto printf(char* format, ...) -> void;
printf(%s, 0);
  1. 整数として計算する

入力:

# 肉の種類 100gあたり価格 グラム数
echo -e "\
pork\t99\t1200
beaf\t120\t1400
chicken\t68\t2300" > /tmp/meats

###ワンライナー:

# 肉の種類 金額
cat /tmp/meats | while read line; do
  cols=($line)
  echo ${cols[0]} `expr ${cols[1]} '*' ${cols[2]}円`
done

出力:

pork 118800
beaf 168000
chicken 156400
  1. 他のコマンドを呼び出す

入力:

# 言語名 コマンド名 バージョン番号
echo -e "\
Perl\tperl\t5.14.2
Python\tpython\t2.7.3
Ruby\truby\t1.9.3p194
PHP\tphp\t5.4.6-1
AWK\tawk\t4.0.1" > /tmp/langs

###ワンライナー:

# "コマンド名:コマンドのフルパス"
for cmd in `cat /tmp/langs | cut -f 2`; do
  echo -e "$cmd:`which $cmd`"
done

出力:

perl:/usr/bin/perl
python:/usr/bin/python
ruby:/usr/bin/ruby
php:/usr/bin/php
node:/usr/bin/node
  1. Schwartz変換ソート

入力:

# 言語名 コマンド名 バージョン番号
echo -e "\
Perl\tperl\t5.14.2
Python\tpython\t2.7.3
Ruby\truby\t1.9.3p194
PHP\tphp\t5.4.6-1
AWK\tawk\t4.0.1" > /tmp/langs

###ワンライナー:

# メジャーバージョン - マイナーバージョン - リリースバージョン でソート
cat /tmp/langs \
  | sed -e "s/[^\t]*\t[^\t]*\t\(.*\)\.\(.*\)\.\(.*\)/\1\t\2\t\3\t\0/" \
  | sort --key=1,3 \
  | cut -f 4-

出力:

JavaScript	node	0.6.19
Ruby	ruby	1.9.3p194
Python	python	2.7.3
Perl	perl	5.14.2
PHP	php	5.4.6-1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment