grepは1行でテキストを検索します。ただし、最初にコメントがある場合はgrep [duplicate]から除外してください。

grepは1行でテキストを検索します。ただし、最初にコメントがある場合はgrep [duplicate]から除外してください。

/ etc / oratabで "test"インスタンスをgrepしようとしています。しかし、コメントで始まらない行だけを表示したいです。以下は、/etc/oratab ファイルの行です。

#test:/u01/appl/oracle/test/db/tech_st/12.1.0.2:N
test:/b001/app/oracle/testrac/db/tech_st/12.1.0.2:N         # line added by Agent

これが私が興味のある詳細を取得しようとしている方法です(シェルスクリプトに次のように入力します)。

DB_NAME=test
env_var=`cat /etc/oratab |grep $DB_NAME |grep -v '#' |cut -d":" -f 2`
echo $env_var

ここでの問題は、2行目にも最後にコメントがあるため、やはり無視されることです。

助けてください。

ありがとう、RA

ベストアンサー1

awkより良い選択は次のとおりです。

DB_NAME=test; export DB_NAME
file=$(awk -F: '$1 == ENVIRON["DB_NAME"] {print $2; exit}' < /etc/oratab)

printf '%s\n' "$file"

Solaris では、次のことを行う必要があります。

PATH=$(getconf PATH):$PATH

#! /usr/xpg4/bin/sh -Solaris 10以下の場合を使用)標準ユーティリティ用です。またはを使用してください。それ以外の場合は、1970年代の古い製品になる可能性がcommand -p awkあります。awk

おすすめ記事