2011-07-28 3 views

답변

1

가 여기에 내가 무엇을 최대 온입니다. 처음에는 아니지만 작동하며 최종 grep이 없습니다. 당신이 손에 pcregrep이있는 경우

grep 'mykey = ' file | sed 's/.*\(mykey = [A-Za-z]*\).*/\1/' 
+1

grep : sed '/ mykey =/s/...'가 필요하지 않습니다. –

+0

@glennjackman 나는 당신을 팔로우하지 않을 것입니다. '... '란 무엇입니까? 내 솔루션에서 단순히'grep'을 제거한다면, 일치하지 않는 모든 라인을 변경하지 않고 일치하는 라인을 적절하게 단축 할 수 있습니다. 명시 적으로 솔루션을 작성한다면, 나는 뭔가 배울 것이고, 나는 그것을 upvote 할 것이다. –

+1

sed에서 "s"명령은 모든 행에 대해 작동 할 필요가 없습니다. "s"를 사용할 행을 지정할 수 있습니다. 예를 들어'seq 1 9 | sed '/ [2468]/s /./&&/' '- "s"명령은 짝수에만 적용됩니다. 이 경우 파이프 라인에서 "grep"을 제거하는 것이 정확하지 않았습니다.'sed -n '/ mykey =/{s /.* \ (mykey = [A-Za-z] * \). */\1/; p} ''- 이것은 "/ mykey = /"와 일치하지 않는 라인을 무시합니다. –

1

는 하나의 단어이며, 공간은 다음과 같이 그것을 다음과 의 mykey = myCoolValue

grep 'mykey' /your/file/here | sed -r 's/.*mykey = (^[ ]*) .*/\1/g' | grep .

+0

"sed -r"의 기능은 무엇입니까? 내 sed는 sed [-Ealn] [-i 확장자] [-e 스크립트] ... [-f script_file] ... [file ...] 만 지원합니다. – Vicky

+0

또한 sed -s 's /.* mykey = (^ [] *). */\ 1/g'을 수행하면됩니다. 그것은 "sed : 1 :"s /.* errorCode = (^ [] *)라고 말합니다. ... ": RE에서 정의되지 않은 \ 1" – Vicky

+0

아, 당신이 리눅스에 있다고 생각했습니다. -r 대신 -E를 사용하면 확장 정규 표현식을 사용할 수 있습니다. Mac에서는 필요하지 않지만 확실하지는 않습니다. sed -s가 필요 없다. – opsguy

0

, 당신은 mykey =

$ pcregrep -o '(?<=mykey =).+' file 

정규식 후에 만 ​​원하는 텍스트를 얻기 위해 터미널이나 스크립트에서이 명령을 실행할 수있는 것은 긍정적 인 lookbehind를 사용하는 경우 -o 만 반환 일치하는 텍스트가 아니라 전체 줄.

관련 문제