grep을 사용하여`name =`바로 뒤에 무언가를 얻는 방법은 무엇입니까?
나는 name=
공백과 영숫자 만 포함 하여 바로 뒤에 무엇이든 grep하려고 노력하고 있습니다.
예 :
name=some value here
나는 얻다
some value here
나는 이것에 완전히 newb, 다음 grep은 name=
.
grep 'name=.*' filename
어떤 도움이라도 대단히 감사합니다.
여기 에 설명 된 대로 다음과 같은 긍정적 인 lookbehind 절이 필요합니다.
grep -P '(?<=name=)[ A-Za-z0-9]*' filename
-P는 grep이 Perl 방언을 사용하도록 만듭니다. 그렇지 않으면 괄호를 이스케이프해야합니다. 다른 곳에서 언급했듯이 -o
매개 변수를 추가하여 일치하는 항목 만 인쇄 할 수도 있습니다 . 괄호 안의 부분은 영숫자 및 공백이 필요함을 지정합니다.
긍정적 인 lookbehind 절을 사용하는 장점은 "name ="텍스트가 일치의 일부가 아니라는 것입니다. grep이 일치하는 텍스트를 강조 표시하면 영숫자 (및 공백) 부분 만 강조 표시됩니다. -o 매개 변수는 "name ="부분도 표시하지 않습니다. 그리고 이것을 sed와 같은 다른 프로그램으로 전환하면 텍스트를 캡처하고 뭔가를 수행 할 수 있습니다. 캡처 링 괄호를 사용하여 수행 할 수도 있지만 "name ="부분을 캡처하지 않습니다.
이 시도:
sed -n 's/^name=//p' filename
sed는 기본적으로 아무것도 인쇄하지 않고 (-n) 접두사를 아무것도 인쇄하지 않고, 대체가 발생하면 인쇄하도록 지시합니다.
보너스 : 공백과 영숫자 만있는 항목 만 일치시키는 데 정말 필요한 경우 다음과 같이 할 수도 있습니다.
sed -n 's/^name=\([ 0-9a-zA-Z]*$\)/\1/p' filename
여기에서는 줄 끝 ($)까지만 공백과 영숫자를 일치시키는 패턴을 추가했으며 일치하면 괄호 안에 그룹을 대체하고 인쇄합니다.
둔한 사람
echo "name=some value here" | awk -F"=" '/name=/ { print $2}'
또는 bash로
str="name=some value here"
IFS="="
set -- $str
echo $1
unset IFS
또는
str="name=some value here"
str=${str/name=/}
grep은 예상대로 추출되지 않습니다. 필요한 것은
grep "name=" file.txt | cut -d'=' -f1-
grep은 패턴과 일치하는 전체 라인을 인쇄합니다. 일치하는 패턴 만 인쇄하려면 grep -o 옵션을 사용하십시오. 패턴의 name = 부분을 제거하려면 sed를 사용해야 할 수도 있습니다.
grep -o 'name=[0-9a-zA-Z ]' myfile | sed /^name=/d
참조 URL : https://stackoverflow.com/questions/1247812/how-to-use-grep-to-get-anything-just-after-name
'Programing' 카테고리의 다른 글
패닉이 발생했는지 확인하는 Rust 단위 테스트를 어떻게 작성합니까? (0) | 2020.12.15 |
---|---|
Objective-C에서 상속과 범주의 차이점은 무엇입니까? (0) | 2020.12.15 |
텍스트 영역의 커서 위치 (x / y 좌표가 아닌 문자 인덱스) (0) | 2020.12.15 |
Android : 텍스트 이동 버튼 수정 (0) | 2020.12.15 |
RVM으로 Ruby 인터프리터를 어떻게 업데이트합니까? (0) | 2020.12.15 |