* コマンド女子 *

~自分の備忘録~

【php編】期間を設定して表示をかえる

キャンペーン中にだけバナー張りたい時に使います。落とすのを忘れたときも安心。

 

<?php

date_default_timezone_set('Asia/Tokyo');

// キャンペーン期間を指定
if (time() >= strtotime("2016-01-11 00:00:00") && time() < strtotime("2016-01-11 23:59:59")) {
echo "<p>ここに表示したいものを入れる</p>";
}
?>

 

※メモ※

date_default_timezone_set() は、日付/時刻関数で 使用されるデフォルトタイムゾーンを設定します。PHP 5.1.0以降で必要。

文字コードと改行コード

文字コード

使用されている文字コードを調べる
nkf -g ファイル名


EUCコードを出力
nkf -e

JISコードを出力
nkf -j

Shift_JISを出力
nkf -s

UTF-8コードを出力
nkf -w

 


▼改行コード

Unixの改行コード(LF)に変換
nkf -Lu

Windowsの改行コード(CR+LF)に変換
nkf -Lw

Macの改行コード(CR)に変換
nkf -Lm

 

例)
Shift_JIS CR+LFへ
nkf -s -Lw ファイル名

行の並び替えをしたい sort

▼コマンド

【sort】
 ・行を並び替えする
※デフォルトでは昇順にソートされる。

▼オプション
主なオプション(一部です)

  -t
   フィールドの区切り文字を指定するオプション
デフォルトはスペース。 例)-t ,でコンマ区切りになる
  -f
   大文字、小文字を区別しないでソートする
  -k
   どの列で並び替えるかを指定する
   例) -k 1,2 … 1列目で比較し、1列目が同じ場合は 2列目で比較する。
   例) -k 1 … 1列目で比較し、同じ場合は2列目で比較し、また同じであれば3列目で比較…というふうに最後の列まで順番に比較する。
  -n
   データを数値とみなしてソートする
  -r
   降順でソートする
  -c
   指定したファイルに対してソートされているかどうかチェックする


▼使用例
こんなファイルがあります

$ cat test.txt

ID,name,age
1,aaa,20
4,ddd,35
5,eee,20
2,bbb,34
3,ccc,40

// ID(第1フィールド)で並び替え
$ cat test.txt | sort -t, -k1
1,aaa,20
2,bbb,34
3,ccc,40
4,ddd,35
5,eee,20
ID,name,age


// 2列目で降順ソート
$ cat test.txt | sort -t, -r -k2,2
ID,name,age
5,eee,20
4,ddd,35
3,ccc,40
2,bbb,34
1,aaa,20


▼日付のソート 

// 年月日が混在する場合
$ cat day2.txt
2014/2/4,13
2013/12/6,20
2014/2/3,12
2015/1/1,4
2014/2/2,10
2015/8/1,25
2015/9/5,30
2015/4/5,3
2013/12/4,45
2013/11/30,30

// 日付でソート。(デリミタを/にする)
$ cat day2.txt | sort -n -t/ -k1
2013/11/30,30
2013/12/4,45
2013/12/6,20
2014/2/2,10
2014/2/3,12
2014/2/4,13
2015/1/1,4
2015/4/5,3
2015/8/1,25
2015/9/5,30

// デリミタを,にして第2フィールドでソート
$ cat day2.txt | sort -n -t, -k2
2015/4/5,3
2015/1/1,4
2014/2/2,10
2014/2/3,12
2014/2/4,13
2013/12/6,20
2015/8/1,25
2013/11/30,30
2015/9/5,30
2013/12/4,45

2つのファイルを比較する「comm(コム)」とか重複する行をまとめる「uniq」とか、まずソートする必要があるので、そんな時にsort使ってます。

指定した部分を取り出したい cut

▼コマンド

【cut】

 ・テキストファイルの指定した部分の文字列を切り出して表示する


▼オプション
  -b
   フィールド単位ではなく、バイト単位で抽出する範囲を指定する
  -c
   フィールド単位ではなく、文字単位で抽出する範囲を指定する
  -d
   フィールドのデリミタ(※)を指定する。-dオプションを指定しない場合はタブが指定される
  -f
   抽出するフィールドの番号を指定する
  -s
   区切り文字が存在しない行は出力しない

※デリミタ…要素の区切りとなる記号や特殊文字(の並び)のこと。CSVなら「,」など。


▼デリミタ・区切り位置の指定方法
・デリミタの指定方法
 ,の場合:-d','
 半角スペースの場合:-d' '

・位置の指定方法 [-cオプション 文字単位]
 -c3:3文字目
 -c1,4:1文字目と4文字目
 -c3-5:3~5文字目
 -c-3:先頭から3文字
 -c5-:5文字目以降

・位置の指定方法 [-fオプション フィールド単位]
 -f3:3番目のフィールド
 -f1,4:1番目と4番目のフィールド
 -f3-5:3~5番目のフィールド
 -f-3:先頭(1番目)から3番目のフィールド
 -f5-:5番目以降のフィールド

 

▼使用例
こんなファイルがあります。

$ cat test.csv
ID,name,age
1,aaa,20
2,bbb,34
3,ccc,40
4,ddd,35
5,eee,20


//1~4番目の文字を取り出す
$ cut -c1-4 test.csv
ID,n
1,aa
2,bb
3,cc
4,dd
5,ee


//1番目のフィールドを取り出す
$ cut -d',' -f1 test.csv
ID
1
2
3
4
5

//2番目のフィールド以降を取り出す
$ cut -d',' -f2- test.csv
name,age
aaa,20
bbb,34
ccc,40
ddd,35
eee,20

grepでもっともっと検索したい! 複数検索・完全一致検索

このようなファイルがあります。

$ cat test.csv
ID,name,age
1,aaa,20
2,bbb,34
3,ccc,40
4,ddd,35
5,eee,20


▼OR検索
「aaa」または「bbb」を検索します。

その①オプション -e をつける

$ grep -e "aaa" -e "bbb" test.csv
1,aaa,20
2,bbb,34


その②「\(バックスラッシュ)」と「|(パイプ)」を入れてもできます。

$ grep "aaa\|bbb" test.csv
1,aaa,20
2,bbb,34

※最後に\|をつけると全部表示されてしまうので注意↓↓

$ grep "aaa\|bbb\|" test.csv
ID,name,age
1,aaa,20
2,bbb,34
3,ccc,40
4,ddd,35
5,eee,20


▼AND検索
「aaa」かつ「20」を検索します。

|(パイプ)でつなぎましょう

$ grep "aaa" test.csv | grep 20
1,aaa,20


▼完全一致検索
完全に一致する単語だけに絞り込みたい時もありますよね。
そんな時は -wオプションを使います。

$ grep -w "aa" test.csv
何も表示されない(該当なし)
$ grep -w "aaa" test.csv
1,aaa,20



文字列を検索したい grep

▼コマンド

grep
 ・指定した検索にマッチする文字列を表示

grep
その意味するところは「ファイル全体から (global) 正規表現 (regular expression) に一致する行を表示(print)する」である。(wikipediaより)


▼【 grep 】主なオプション
  -c パターンを含む行数のみを表示
  -h 検索結果の先頭にマッチしたファイル名を同時に表示
  -i アルファベットの大文字小文字の区別をしない
  -l 検索条件にマッチしたファイル名のみを表示
  -n 各行の先頭にファイルの行番号を表示
  -s 存在しないファイルや読めないファイルに対してのエラーメッセージを抑制する
  -v パターンに一致しない行を出力する
  -w パターンの検索を単語として行う
  -E 拡張正規表現を使用する
  -F 固定文字列を使用する


▼その他
grepには、grep, fgrep, egrepという3つのコマンドがあり、それぞれの目的に合わせて使い分けます。
 ・grep正規表現を使った文字列の検索を行う
 ・fgrep…正規表現は使用せずに文字列の検索を行う。オプション-E と同じような動作をする
 ・egrep…grep正規表現よりも強力な正規表現を用いて検索する。オプション-F と同じような動作をする

 

▼使用例
こんなファイルがあったとします。

$ cat test.csv
ID,name,age
1,aaa,20
2,bbb,34
3,ccc,40
4,ddd,35
5,eee,20

//20を取り出したい時
$ grep 20 test.csv
1,aaa,20
5,eee,20


//20以外を取り出したい時
$ grep -v 20 test.csv
ID,name,age
2,bbb,34
3,ccc,40
4,ddd,35


でも、「1行目」の「5」を取り出したい時。
普通にgrepだと、こうなっちゃう。。

$ grep 5 test.csv
4,ddd,35
5,eee,20

grep 以外のコマンドも使わないとですね。。


grepは超使うので、勉強のためにももっと書きたい(・∀・)