.png)
mm/dd/yyyy 形式の日付から年を抽出するにはどうすればよいですか?
次の日付を含むテキスト ファイルがあります。
01/01/2001
05/16/1970
06/08/2010
sed を使用してこれらの日付のそれぞれから年だけを抽出するにはどうすればよいでしょうか?
答え1
次のように試してくださいsed
:
cat file | sed 's/[0-1][0-9]\/[0-3][0-9]\/\([12][0-9][0-9][0-9]\)/\1/g' > newfile
というファイルを読み取りfile
、結果を新しいファイルに書き込みますnewfile
(必要に応じて置き換えます)。
年数を集計したい場合は次のようにします
cat file | sed 's/[0-1][0-9]\/[0-3][0-9]\/\([12][0-9][0-9][0-9]\)/\1/g' | tr ' ' \\n | grep . | sort -nu
答え2
echo "01/01/2001 05/16/1970 06/08/2010" > datefile
sed 's:[0-1][0-9]/[0-3][0-9]/::g' datefile
結果:2001 1970 2010
これは、すべての日付が 1 行にある場合と、各日付がそれぞれ別の行にある場合の両方で機能します。区切り文字は、:
理解しやすくするためのものです。グローバルg
オプションは、すべての有効な置換を行います。
答え3
日付は米国の「MM/DD/YYYY」形式なので、日付を含むdate
ファイルに対して GNU を直接使用することができます。dates
$ date -f dates "+%Y"
2001
1970
2010
より凝った書式設定をすることもできます。
$ date -f dates "+%F is in %Y and is a %A"
2001-01-01 is in 2001 and is a Monday
1970-05-16 is in 1970 and is a Saturday
2010-06-08 is in 2010 and is a Tuesday
フォーマットシーケンス (%Y
など) については、GNUdate
マニュアルで説明されています。
GNUが扱う入力形式date
については、GNU coreutils マニュアル。
答え4
とawk
:
awk -F'/' '{print $3}' textfile