- 要素を取り出してフォーマットする(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
- タブ以外の区切りを使う
入力:
# 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
- 正規表現にマッチした行を出力する
入力:
# 言語名 コマンド名 バージョン番号
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
- 正規表現のマッチを置換する(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);
- 整数として計算する
入力:
# 肉の種類 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
- 他のコマンドを呼び出す
入力:
# 言語名 コマンド名 バージョン番号
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
- 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