(O+P)ut

アウトプット



(O+P)ut

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

【Bash/Linux】sed -$Npを利用して特定の倍数行を表示するワンライナー

スポンサーリンク

やりたいこと

以下のようなテキストファイルがあったとして

$ cat test.txt
a
1
A
b
2
B
c
3
C
d
4
D

数字が入った行(3で割って余りが2の行)のみを表示する。

環境情報
  • sed (GNU sed) 4.4

やり方

以下構文でファイルの3行目のみを抜きだすことができるので

sed -n 3p filename.txt

以下を実行すると

$  for i in `seq 0 10`;do a=`expr $i \* 3 + 2`; sed -n "$a"p test.txt ;done

要件通りの値が出力される。

1
2
3
4

以下、補足です。

補足

シェルスクリプト形式でも実現できますがsedのオプションを利用すればもう少しシンプルに記載できます。

exprあたりで空白が抜けると以下のようにループが回り切ってエラーが画面に出るので、試す際はseqの数字を小さくしておくことをオススメします。

$  for i in `seq 0 10`;do a=`expr $i \* 3+2`; sed -n "$a"p test.txt ;done
expr: non-integer argument
...

以上、ご参考になれば幸いです。