답변:
awk가 더 나은 도구 일 것입니다.
$ cat test.dat
LINE 1
LINE 2
POP3_SERVER_NAME = localhost
"POP3_SERVER_NAME"이 포함 된 행을 검색하십시오. 마지막 필드를 인쇄하십시오. 이것은 항상 3 행에있는 POP3_SERVER_NAME에 의존하지 않으며, 이는 아마도 좋은 일입니다.
$ awk '/POP3_SERVER_NAME/{print $NF}' test.dat
localhost
응용 프로그램에 따라 정규식을보다 엄격하게 만들어야 할 수도 있습니다. 예를 들어 POP3_SERVER_NAME으로 시작 하는 행만 일치 시키려고 할 수 있습니다.
$ awk '/^POP3_SERVER_NAME/{print $NF}' test.dat
localhost
sed를 사용하는 것은 조금 덜 직관적입니다. (감사합니다, 아이러니를 알고 있습니다.) 어디에서나 POP3_SERVER_NAME이 포함 된 줄을 지정하십시오. 행의 시작부터 "="다음의 선택적 공백까지 모든 텍스트를 빈 문자열로 바꿉니다. 그런 다음 인쇄하십시오.
sed -n -e '/POP3_SERVER_NAME/ s/.*\= *//p' test.dat
awk
에서 사용하는 구분 기호 를 공백을 사용하여 다른 것으로 변경할 수 있습니다 -F
. 예를 들어 : -F "="
사용 =
당신이 언급 경우에 구분 기호로.
바꾸기 p
라인의 불필요한 부분을 제거하는 치환 명령을 사용합니다.
sed -n '3 s/^[^=]*= *//p' installation.sh
위치가 아닌 키워드로 줄을 일치시킬 수 있습니다.
sed -n 's/^ *POP3_SERVER_NAME *= *//p' installation.sh
설정 파일이있는 것 같습니다. 할 수있는 일은 Adam Siemeon / slm이 제안한 것과 유사합니다.
sed -nr 's/[^=]+=\s*(.+)$/\1/p' filename
여기서 [^=]
제외 모든 '='문자가 +
하나 이상의 문자가 동일한 유형의 이러한 실제 다음을 말한다 =
, \s
탭을 포함하는 임의의 공백 ( \t
새로운 라인 \n
, \r\n
및 일반 공간 '반면 *
수단은 0 개 이상의 동일한 타입의 괄호는 2, ..., \ n 교체 자리, \는 \ 1로 일치하는 문자 순서를 배치 안에 무엇이 잡을 $
줄의 끝을 의미한다이의 전형적인 교체 패턴을 다음과 같습니다. s/.../.../modifiers
. 명령 줄 옵션 -r
을 의미합니다 확장 정규 표현식 구문 (편의상) -n
은 신속하게 요청하거나 요청하지 않는 한 아무것도 출력하지 않음을 의미합니다 p
.
다음과 같이 g
수정자를 사용하여 전체 검색을 수행 할 수 있습니다.
sed -nr 's/[^=]+=\s*(.+)$/\1 /pg' filename # note the space after \1
그래서 당신으로 구분 된 문자열을 얻을 ' '
(수 \n
, \t
또는 당신이) 쉽게 처리 할 수 있습니다.
방정식 문자가 앞에 오는 값은 줄의 끝까지 확장되며 의미가 단순한 "값"에서 벗어나는 주석이나 기타 문자가 뒤에 오지 않는 경우 둘 다 유효합니다.
다른 사람의 게시물에 대해서는 아직 여기에 댓글을 달 수 없습니다. 행을 표시하려면 s
시작 따옴표 문자 앞 이나 앞에 vim과 같이 행 번호를 전달하십시오 (3의 경우 ).
sed -nr '3s/[^=]+=\s*(.+)$/\1/p' filename
를보십시오 info sed
. 예를 들어 3.2와 4.7이 특히 중요합니다.
Linux / Unix의 장점은 일반적으로 무언가를 달성 할 수있는 여러 가지 방법이 있다는 것입니다. op의 경우 파일에서 POP 서버 이름을 추출하는 방법에는 적어도 네 가지가 있습니다.
grep POP3_SERVER_NAME installation.sh | cut -d'=' -f2
grep POP3_SERVER_NAME installation.sh | awk '{print $3}'
grep POP3_SERVER_NAME installation.sh | sed 's/.*= //'
sed -n 's/^.*POP3_SERVER_NAME = //p' installation.sh
awk
명령은 훌륭하지만-주위에 공백이있는 경우에만 가능합니다=
. 작동하지 않습니다POP3_SERVER_NAME=localhost
.