Programing

grep을 사용하여`name =`바로 뒤에 무언가를 얻는 방법은 무엇입니까?

lottogame 2020. 12. 15. 08:12
반응형

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

반응형