2017-04-24 1 views
5

특정 문자열로 시작하는 파일의 모든 줄을 찾고 싶습니다. 문제는 미리 끈 속에 무엇이 있는지 모릅니다. 값은 변수에 저장됩니다. 배쉬 변수 my_string이 어떤 정규 표현식 특수 문자가 포함 된 경우, grep 울 것이기 때문에 특정 문자열로 시작하는 grep 줄

grep "^${my_string}" file.txt; 

는, 모든 사람들이 나쁜 일이됩니다

초보적인 솔루션은 다음이 될 것입니다.

grep 울지 않겠습니까?

답변

5

당신은 index 기능을 사용하여 비 정규식 검색 awk 대신 grep을 사용해야합니다

awk -v s="$my_string" 'index($0, s) == 1' file 

index($0, s) == 1는 검색 문자열은 단지 시작에 발견 보장합니다. 배쉬 변수 my_string이 어떤 정규 표현식 특수 문자가 포함 된 경우

0

당신은, grep 울 것 무엇을 의미합니까 지금 @anubhava의 나에게 문제를 사용하여, (선생님 감사합니다)를 숟가락으로 떠 먹이는 그

$ cat file 
crying now 
no cry 
$ var="n.*" 
$ echo "$var" 
n.* 
$ grep "^$var" file 
no cry 

후자의 -F (또는 fgrep)를 그대로 정규식 문자를 grep 사용하고자하기 때문에 작업에 대한 grep는 적어도 두 grep의 등을 필요로하는 것처럼 보인다 :

$ cat file 
OMG it’s full of 
*s 
$ var="*" 
$ grep "^.\{"${#var}"\}" file|grep -F "$var" 
*s 

${#var}은 Bash에서 길이가 var이고 파일의 시작 부분에서 추출한 문자의 양이 후자의 grep으로 반환됩니다.

(2001에서 인용)

+2

문제가 있음을 이용하여 '우리는 라인의 시작 부분에서 일치하는 항목을 찾습니다'grep'을 강요 할 수 -F'. – anubhava

+1

@anubhava 오, 그래, 그건 사실이야. 좋은 아침. –

관련 문제