저는 현재 우분투에 익숙해지고 있습니다. 여러 bash 파일을 다루는 개인 프로젝트가 있습니다.
config.txt
다음 문자열이 포함된 파일이 있습니다.
hostip="192.168.1.2"
pname="My Office"
pid="01-001"
hostip
내 질문은 file 의 변수가 필요한 bash 파일이 있는 경우 문자열을 config.txt
어떻게 추출합니까 192.168.1.2
(큰따옴표는 출력에서 제거해야 함)입니다.
답변1
awk
이를 달성하기 위해 이를 사용할 수 있습니다 . 예를 들면 다음과 같습니다.
$ awk -F'"' '/hostip/ {print $2}' host.txt
192.168.1.2
- 이
-F
옵션은 필드 구분 기호를 결정합니다. /hostip/
검색 문자열 결정{print $2}
인쇄할 필드를 결정합니다 .
이렇게 하면 파일에서 문자열을 가져와 bash 스크립트 내부의 변수에 넣을 수 있습니다. 예를 들면 다음과 같습니다.
hostip=$(awk -F'"' '/hostip/ {print $2}' host.txt)
답변2
사용sed
sed -n "s/hostip=\([^ ]*.*\)/\1/p" config.txt
그러나 config.txt 선언에 공백이 포함된 경우(예: ) hostip = 192.168.1.2
:
sed -n "s/hostip *= *\([^ ]*.*\)/\1/p" config.txt
마지막으로, 삶을 더 쉽게 만들기 위해 함수나 래퍼 스크립트를 만듭니다.
get_value() {
sed -n "s/$1 *= *\([^ ]*.*\)/\1/p" $2
}
get_value hostip config.txt
# prints 192.168.1.2
get_value pname config.txt
# prints My Office
hostip=$(get_value hostip config.txt)
답변3
Raku(이전 Perl6) 사용
~$ raku -ne 'put $/ if m/ <?after hostip\= > \" <([\d**1..3 \.]**3 \d**1..3)> \" /;' config1.txt
192.168.1.2
명령 -ne
줄 플래그는 Raku에게 입력을 한 줄씩 확인하라고 지시합니다. 위의 코드는 다음과 같이 작성된 긍정적인 0 너비 LookBehind 어설션을 사용합니다 <?after … >
. 정규식은 마침표로 구분된 1~3자리 숫자 그룹의 4개 숫자 그룹과 일치하는 항목을 찾습니다. 이 <( … )>
관용구는 Raku에게 각 외부 일치 항목을 제거하고 내부 일치 항목을 $/
반환된 일치 변수에 로드하도록 지시합니다.
HTH.