검색시 awk 변수를 사용하는 방법은 무엇입니까?awk 변수를 검색에 사용하는 방법은 무엇입니까?
Name="jony"
awk -v name="$Name" '/name/ {print $0}' file
이 실제로 jony
입니다 $Name
아니, 문자열 name
를 검색합니다.
검색시 awk 변수를 사용하는 방법은 무엇입니까?awk 변수를 검색에 사용하는 방법은 무엇입니까?
Name="jony"
awk -v name="$Name" '/name/ {print $0}' file
이 실제로 jony
입니다 $Name
아니, 문자열 name
를 검색합니다.
정확함 awk
은 / /
의 변수를 인식하지 않습니다. 당신은 할 수 있습니다 : awk's
기본 동작은
Name="jony"
awk -v name="$Name" '$0 ~ name' file
print
때문에 우리는 여기를 사용하여 피할 수 있습니다.
희망 내가 정확하게 문제를 이해 : 왜 한 다음 시도 실 거예요 :
awk '/'"$Name"'/ { print } ' testfile
아니요, 절대로하지 마십시오. 매우 버그가 있고 오류가 발생하기 쉽습니다. 변수를 설정하려면'-v'를 사용하거나 합리적인 대안을 찾으려면 comp.unix.shell FAQ http://cfajohnson.com/shell/cus-faq-2.html#Q24를보십시오. –
AWK 한 줄을 작성, 당신은 큰 따옴표 또는 작은 따옴표로 스크립트를 인용 할 수있다. [! 나쁜]
Name="jony"
awk "/$Name/" file
# this works. after shell has performed substitutions, the line looks like
awk "/jony/" file
심지어 따옴표없이 이름이 포함되지 않은 경우 공간 : 후자의 경우, 쉘은 -v
옵션을 통해 스크립트에 변수를 전달하지 않아도 직접 있도록 모든 치환을 수행 :
awk /$Name/ file
모든 단순함은 곧 당신이 쉘 변수 확장을 방지하기 위해 달러 기호를 탈출해야하기 때문에 등 $ 0 $ 1, 사용 AWK 특수 변수를 포함하여 스크립트에서 $를 사용하여 원하는대로 사라진다 .
awk "/$Name/ {print \$0}"
또한 스크립트에 리터럴 텍스트를 추가하려면 큰 따옴표를 이스케이프 처리해야합니다. 서투른 보이는 :
awk "/$Name/ {print \"Found in: \" \$0}"
쉘 오류가 발생합니다 따옴표로 정규 표현식을 부정, 모두 왕관 :
awk "!/$Name/"
#error> ... event not found ...
오류가 $ 이름 자체가 포함되어있는 경우 일어날 것입니다! 기호. 이것은 큰 따옴표를 사용하는 것을 신뢰할 수 없게 만듭니다.
그래서, 보안을 위해 작은 따옴표 :
그냥 ~ 여기서 무엇을하고 있는지 설명 할 수를 선호? 나는 이것을 시도했지만 작동하지 않습니다. > 'echo "안녕하세요 jony입니다."| awk '$ 0 ~ jony' 출력 : 안녕하세요 jony' > 안녕하세요 jony입니다. awk '$ 0 ~ holmes' > 출력 : 안녕하세요 jony' '홈즈'가 없어도 줄을 인쇄하는 이유를 모르겠습니다. – Jagan
가이드에서 : ~ (물결 모양), ~ 연산자 정규 표현식을 사용하여 표현식을 일치시킬 수도 있습니다. 이 표현식을 사용하면 일치시킬 문자열을 지정할 수 있습니다. 현재의 전체 입력 레코드 일 필요는 없습니다. 두 연산자'~ '와'! ~'는 정규 표현식 비교를 수행합니다. 이 연산자를 사용하는 표현식은 패턴이나 if, while, for 및 do 문에서 사용할 수 있습니다. ' –
@Jagan'echo '할 때 안녕하세요 jony "| awk '$ 0 ~ holmes''' awk'는'homes'을 정의되지 않은 변수로보고 라인을 출력합니다.'awk'가 그것을 리터럴 문자열로 생각하게하려면 그것을 인용해야합니다. –