/tmp/ggloc.log
次のデータを含むファイルがあります。
$ cat /tmp/ggloc.log
oracle 12061 1 1 Sep08 ? 10:44:07 ./mgr PARAMFILE /oracle/gg/dirprm/mgr.prm REPORTFILE /oracle/gg/dirrpt/MGR.rpt PROCESSID MGR USESUBDIRS
oracle 75841 75810 0 13:55 ? 00:00:00 grep -i mgr
postfix 103283 103268 0 Feb24 ? 00:02:18 qmgr -l -t unix -u
oracle 185935 1 0 Sep08 ? 00:14:14 ./mgr PARAMFILE /oracle/GG_123012/GG_HOME/dirprm/mgr.prm REPORTFILE /oracle/GG_123012/GG_HOME/dirrpt/MGR.rpt PROCESSID MGR
したがって、上記のファイルから次の出力が必要です。
/oracle/gg
/oracle/GG_123012/GG_HOME
私は次のように試しました
k=$(cat /tmp/ggloc.log)
echo "$k" | sed 's/.*PARAMFILE \(.*\) REPORTFILE.*/\1/' | awk -F "/dirprm" '{print $1}'
私の出力は次のとおりです
/oracle/gg
oracle 75841 75810 0 13:55 ? 00:00:00 grep -i mgr
postfix 103283 103268 0 Feb24 ? 00:02:18 qmgr -l -t unix -u
/oracle/GG_123012/GG_HOME
では、どのように取得できますか?
/oracle/gg
/oracle/GG_123012/GG_HOME
ご意見が必要です
ベストアンサー1
私考えるその単語を含む行を見つけPARAMFILE
て、その後に最長の文字列を印刷PARAMFILE
し、最後の単語までスペースを印刷します/dirprm
。その場合は、次のことを試すことができます。
$ sed -En 's/.*PARAMFILE (.*)\/dirprm.*/\1/p' file
/oracle/gg
/oracle/GG_123012/GG_HOME
またはsed
サポートしていない場合-E
:
$ sed -n 's/.*PARAMFILE \(.*\)\/dirprm.*/\1/p' file
/oracle/gg
/oracle/GG_123012/GG_HOME
でも
$ awk '$9=="PARAMFILE"{sub("/dirprm.*","",$10); print $10}' file
/oracle/gg
/oracle/GG_123012/GG_HOME
または、最後のアイテムの代わりに最初のアイテムが必要な場合/dirpm
:
$ perl -lne 'print $1 if s/.*PARAMFILE (.*?)\/dirprm.*/\1/' file
/oracle/gg
/oracle/GG_123012/GG_HOME