Tuesday, May 31, 2016

sed, 日付の表示形式を変換。「2016.5.31」=>「2016/5/31」(いや、むしろ、「2016/5/31」=>「2016.5.31」)

(追記。2016年6月3日)

cat asty-ch_member.tab | gsed -e 's|\([0-9]{4}\)\.\([0-9]\?\)\.\([0-9]\?\)|\1/\2/\3|g' | less

 

いや、むしろ、「2016/5/31」=>「2016.5.31」、となってしまった。

まあ、それはそれで構いませんけどね。データの形式が、揃ってればいいんで。

========================================

日付の表示形式を変えたい。

一行の中に出てくる「2016.5.31」という日付表示を、「2016/5/31」に変えたい!

 

そこで、自分なりに頑張って、シェル芸に取り組んでみました。

 

要は、sed の使い方なんですけどね。

これでできました! バンザイ!

cat asty-ch_member.tab | gsed -e 's|\(....\)\.\(.\?\)\.\(.\?\)|\1/\2/\3|g' | less

 

手間取ったのは、sed での正規表現の書き方です。

shell でのワイルドカードの書き方と混同しておりました。

 (ただし、まだ、sed での改行がよく分からない・・・)

 

<参考にしたページ>

sed でのワイルドカードの書き方

http://itpro.nikkeibp.co.jp/article/COLUMN/20060228/231046/

正規表現意味
. 改行文字以外の任意の1文字
* 直前の1文字の0回以上の繰り返しに一致。直前の文字は正規表現でも構わない
^ 行の先頭
$ 行の末尾
[ ] かっこ内の任意の1文字に一致。ハイフン(-)で範囲指定もできる
[^ ] かっこ内の任意の1文字に不一致。ハイフン(-)で範囲指定もできる
\+ 直前の文字の1個以上の繰り返しに一致
\? 直前の文字の0または1文字に一致
\{n\} 直前の文字のn個の繰り返しに一致
\{n,\} 直前の文字のn個以上の繰り返しに一致
\{,m\} 直前の文字のm個以下の繰り返しに一致
\{n,m\} 直前の文字のn個以上,m個以下の繰り返しに一致
パターン1\|パターン2 パターン1またはパターン2のいずれかに一致
\(パターン\) パターンをグループ化する。マッチした内容は\1や\2として利用できる
\ 正規表現に使われる記号を普通の文字として扱う

No comments:

Post a Comment