(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Linux】日付名のファイルをsedコマンドで絞る

スポンサーリンク

ワンライナー

例えば以下のように日付で管理されているファイルがあった際に

# ls
20190723.txt  20190729.txt  20190804.txt  20190810.txt  20190816.txt
20190724.txt  20190730.txt  20190805.txt  20190811.txt  20190817.txt
20190725.txt  20190731.txt  20190806.txt  20190812.txt  20190818.txt
20190726.txt  20190801.txt  20190807.txt  20190813.txt  20190819.txt
20190727.txt  20190802.txt  20190808.txt  20190814.txt
20190728.txt  20190803.txt  20190809.txt  20190815.txt

20190801から20190805だけを抜き出したい場合は以下のワンライナーで一発です。

# ls -l | awk '{print $NF}' | sed -n '/20190801/,/20190805/p'
20190801.txt
20190802.txt
20190803.txt
20190804.txt
20190805.txt

以下、補足です。

補足

sedコマンドを用いた以下の構文を利用しています。

sed -n '/開始パターン/,/終了パターン/p'

要は-nオプションとpフラグの組み合わせによってマッチした行のみを出力します。

例えば連続した数値を出力するseqコマンドを利用して

# seq 5
1
2
3
4
5

以下のように絞ることができます。

# seq 5 | sed -n '/2/,/4/p'
2
3
4

冒頭のワンライナーは前段のawkコマンド部分で最終列のファイル名だけを取り出し、後段のsedコマンドで開始と終了を指定して抜き出します。それらに対してxargsコマンド等を利用すれば一括処理も可能です。

以上、個人的によく使うワンライナーの紹介でした。頭の片隅に入れておくとどこかで役立つと思います。