ShellScript
grep
備忘録

grepの使い方 備忘録。shellで 特定の文字列以降を抽出

結論
grep -Po 'キーワード\K[^ ]+' <<< 入力データ >> 出力先

例)gnuplotで表示するためのテキストファイル準備[VASP計算用 in Linux]

\#!/bin/bash 
\#各フォルダのOSZICARkからエネルギーの値を抽出したい
WORKDIR=`pwd`
echo "" > energy
for Q in 0.97 0.98  0.99   1.0    1.01   ;
do
  cd \$WORKDIR/\$Q
echo "$Q"  |tr '\n' '\t' >> ../energy
tail -n 1 OSZICAR   >> ../energy
done



0.97 4 F= -.21544349E+02 E0= -.21515451E+02 d E =-.259105E-04
0.98 4 F= -.21544349E+02 E0= -.21515451E+02 d E =-.259105E-04
0.99 4 F= -.21544349E+02 E0= -.21515451E+02 d E =-.259106E-04
1.0 4 F= -.21544349E+02 E0= -.21515451E+02 d E =-.259107E-04
1.01 4 F= -.21544349E+02 E0= -.21515451E+02 d E =-.259106E-04

を得たけど、本当は[d E =]以降を集めて

0.97  -.259105E-04
0.98  -.259105E-04
0.99  -.259106E-04
1.0  -.259107E-04
1.01  -.259106E-04

が欲しい。

tail -n 1 OSZICAR >> ../energy

grep -Po 'd E =\K[^ ]+' <<<`tail -n 1 OSZICAR` >> ../energy
に置き換えて解決!

\K[^ ]+とか正確に覚える自信がないので備忘録として保存

参考リンク
https://askubuntu.com/questions/697120/extract-word-from-string-using-grep-sed-awk