2017-11-01 12 views
0

파일에서 -l 또는 --log-file 문자열을 찾아 변수와 함께 전달 된 절대 경로를 저장하는 방법은 무엇입니까?파일에서 -l 또는 --log-file 문자열을 찾아 변수와 함께 전달 된 절대 경로를 저장하는 방법은 무엇입니까?

샘플 파일 1 : -

$ cat server.log 
server_options='-l /tmp/server_log' 

샘플 파일 2 : -

$ cat server.log 
server_options='--log-file=/tmp/server1_log' 

요구 사항

-l 또는 --log-파일이 변수 server_options에서 발견되는 경우 다음을 찾을 수 파일의 절대 경로 및 변수

노트에 저장 : - 1.하지 마십시오을 "#"로 시작하는 행을 고려하십시오. 2. -l과 절대 경로 사이에 "-l"옵션을 지정하면 공백이 생기며 "--log-file" 절대 경로 "="

예컨대 로그인 할 동등한있을 것이다

server_options='-l /tmp/server_log' 
server_options='--log-file=/tmp/server1_log' 
변수 "LOG_FILE"

$ echo $LOG_FILE 
/tmp/server_log 

원하는 출력의 저장된 샘플 1 파일

원하는 출력 변수 "LOG_FILE"에 저장된 샘플 2 파일

$ echo $LOG_FILE 
/tmp/server1_log 

이 시도 : -

$ grep "^[^#;]" server.log | awk '/\-\l|/{ print $2 }' 
/tmp/server_log' 

awk보다이

+0

업데이트 이상의 플래그가있을 수 있다는 질문 해당 변수의'-l/tmp/server_log' 다음에 – Inian

+0

그리고 옵션을 저장하기 위해 변수를 사용하지 않으려면 배열을 사용하십시오! GNU의 GREP와 – Inian

+2

: ('.?. (-l | --log-파일) \ K * (=)'그렙 -PO 파일)'LOG_FILE = $' – Cyrus

답변

1

기타를 달성하기 위해 더 신뢰할 수있는 방법이 필요, 또한 유사한 결과를 가질 수 cut 명령이 있습니다. 예를 들어 : ' 문자로 잘라

grep "-l|--log-file" server.log | cut -d'\'' -f1 | cut -d' ' -f1 

cut -d'\'' -f1 = 2 문자열 "공간"문자로 잘라

cut -d' ' -f1 =을 선택, 2 문자열을 선택

0
grep "^[^#;]" server.log |grep -Po '(-l|--log-file) \K.*(?=.)' 
이 조금 긴 샷
+0

을 게시 한 줄에 "#"로 시작하는 라인을 무시하는 방법 당신은'그렙 -PO '^ [^ #]로 결합 할 수 있습니다 . * (? =.) '/ etc/ddn/ime/ime-server.conf' – Inian

+0

고마워, 작동 – asokan

+0

-l과 절대 경로 사이에 "-l"옵션을 지정하면 공백이 생기며 "--log-file"이 "--log-file"과 절대 경로 사이에 지정된 경우 경로 "=" – asokan

0

, 하지만 이해할 수

egrep '\-l|\-\-log\-file' server.log | grep -v ^# | gawk -F"'" '{print $2}' | cut -d" " -f2