2010-05-31 10 views
0

이상의 파일나오지 또는 그렙 또는 AWK에 맞게 아주 아주 긴 줄

param1=" 1,deerfntjefnerjfntrjgntrjnvgrvgrtbvggfrjbntr*rfr4fv*frfftrjgtrignmtignmtyightygjn  2,3,4,5,6,7,8, 
rfcmckmfdkckemdio8u548384omxc,mor0ckofcmineucfhcbdjcnedjcnywedpeodl40fcrcmkedmrikmckffmcrffmrfrifmtrifmrifvysdfn drfr4fdr4fmedmifmitfmifrtfrfrfrfnurfnurnfrunfrufnrufnrufnrufnruf"**** 

sed -n "/$param1/p" file 

로 PARAM1의 내용과 일치 할 필요는 있지만, 선 길이 (매우 긴 줄) 내가 캔트 때문에 줄을 일치 시키십시오. 매우 긴 줄을 맞추는 가장 좋은 방법은 무엇입니까?

+0

'sed -n "/^param1/p"'를 의미하지 않습니까? "$"는 줄 끝과 일치합니다. "^"처음입니다. –

+1

줄의 길이에는 제한이 없습니다. 더 구체적으로 말하십시오 : 정확히 어디에 문제가 있습니까? –

+0

@Dav $는 쉘 변수 대체입니다. – bmargulies

답변

1

문제는 param1에 sed가 해석하는 특수 문자가 포함되어 있다는 것입니다. 별표 ('*')는 '이전 문자의 0 회 이상'을 의미하기 때문에 sed가이 문자를 해석 할 때 찾고있는 문자 별표와 일치하는 문자는 없습니다.

다음은 도움이 작동 bash는 스크립트입니다

#!/bin/bash 

param1=' 1,deerfntjefnerjfntrjgntrjnvgrvgrtbvggfrjbntr\*rfr4fv\*frfftrjgtrignmtignmtyightygjn 2,3,4,5,6,7,8, rfcmckmfdkckemdio8u548384omxc,mor0ckofcmineucfhcbdjcnedjcnywedpeodl40fcrcmkedmrikmckffmcrffmrfrifmtrifmrifvysdfn' 

cat <<EOF | sed "s/${param1}/Bubba/g" 
1,deerfntjefnerjfntrjgntrjnvgrvgrtbvggfrjbntr*rfr4fv*frfftrjgtrignmtignmtyightygjn 2,3,4,5,6,7,8, rfcmckmfdkckemdio8u548384omxc,mor0ckofcmineucfhcbdjcnedjcnywedpeodl40fcrcmkedmrikmckffmcrffmrfrifmtrifmrifvysdfn  
EOF 
+0

THX는하지만 난 단지 그렙처럼 일치하는 라인을 교체 할 필요가 대상은 일치 확인하는 것입니다 yael – yael

+2

이것은 당신이 가진 문제를 설명하기위한 예일뿐입니다. e 문제 (일치하는 표현식에 특수 문자가 있음)가 아닌 사용법을 설명합니다. 분명히 당신은 당신의 시합을 'Bubba'로 대체하지 않을 것입니다. –

+0

@yael : 왜'grep'을 사용하지 않으시겠습니까? –

1

은 어쩌면 문제는 $param1에 특수 문자가 포함 된 것입니다? 이것은 나를 위해 작동 :

A="$(perl -e 'print "a" x 10000')" 
echo $A | sed -n "/$A/p" 

은 ($A 10 개 000 a 문자를 포함).

echo $A | grep -F $A 

도 작동

echo $A | grep -P $A 

은 (두 번째로 그렙을 필요로 내장 PCRE를 지원합니다. 당신이 패턴을 사용한다 일치 하나이 나 pcregrep을합니다. 당신은, 고정을 사용하지 않는 경우 grep (grep -F)).

echo $A | grep $A 

이 너무 느립니다.

+0

펄에서 더 유용한 솔루션을 얻을 수 있습니까? – yael

+0

«유용한»의 의미는 무엇입니까? – ZyX