- 플랫폼: RHEL7
- 셸: 배쉬
- 예상 결과: 값을 변수로 저장
다음과 같은 텍스트에서 IP를 캡처하려고 합니다.
{
"ip": "12.34.56.7",
"type": "LEARNED"
}
터미널에서 다음 명령을 실행하면 예상대로 IP를 얻습니다.
grep '"ip":' ../path/to/file.txt | awk '{ print $2 }' | tr -d '"' | tr -d ','
스크립트에 있는 내용은 다음과 같습니다.
IP=grep '"ip":' ../path/to/file.txt | awk '{ print $2 }' | tr -d '"' | tr -d ','
IP=
나는 모든 것을 따옴표로 묶거나 주사위를 사용하되 사용하지 않고 grep ip 텍스트 주위의 따옴표를 이스케이프 처리하는 등 몇 가지 다른 작업을 시도했습니다 . \\
이 문제에 접근하는 올바른 방법이 확실하지 않습니다. 스크립트에 따옴표가 없으면 스크립트는 내 명령을 분해하거나 어떤 이유로 awk에서 $2를 제거합니다.
정보를 제공해 주셔서 감사합니다.
답변1
쉘 명령의 출력을 변수에 할당하려면 VAR=$(command)
귀하의 경우에 따라 다음을 사용하십시오.
IP=$(grep '"ip":' ../path/to/file.txt | awk '{ print $2 }' | tr -d '"' | tr -d ',')
그러나 얼마 전 누군가가 sed
너무 많은 복잡성을 피하기 위해 파이프라인을 발명하기로 결정했습니다.
IP=$(sed '/"ip":/!d;s/",//;s/.*"//' ../path/to/file.txt)
/"ip":/!d
"ip":
없는 줄 은 모두 무시s/",//
뒤따르는 큰따옴표와 쉼표를 제거하세요.;s/.*"//
나머지 큰따옴표 앞의 모든 항목을 제거합니다.