변수가 있다고 가정 해 봅시다
line="This is where we select from a table."
이제 문장에 select가 몇 번이나 나타나는지 알고 싶습니다.
grep -ci "select" $line
나는 그것을 시도했지만 성공하지 못했습니다. 나도 시도했다
grep -ci "select" "$line"
여전히 작동하지 않습니다. 다음 오류가 발생합니다.
grep: This is where we select from a table.: No such file or directory
답변1
grep
표준 입력을 읽었습니다 . 그게 다야관로...
$ echo "$line" | grep select
... 또는여기에 있는 문자열...
$ grep select <<< "$line"
또한 greping하기 전에 공백을 줄 바꿈으로 바꿀 수도 있습니다.
$ echo "$line" | tr ' ' '\n' | grep select
grep
...또는 일치하는 항목만 인쇄하도록 요청할 수 있습니다 .
$ echo "$line" | grep -o select
이렇게 하면 일치하는 줄의 나머지 부분을 제거할 수 있습니다.
편집하다:아, 너무 빨리 읽었네요. 감사합니다.표시. 발생 횟수를 계산하려면 다음 중 하나를 파이프로 연결하세요.wc(1)
;)
나중에 또 다른 수정이 이루어졌습니다.이즈카르타$line
를 사용할 때 인용된 주석입니다 echo
.
답변2
test=$line i=0
while case "$test" in (*select*)
test=${test#*select};;(*) ! :;;
esac; do i=$(($i+1)); done
grep
아주 간단한 일은 전화 통화도 필요하지 않습니다.
또는 함수로:
occur() while case "$1" in (*"$2"*) set -- \
"${1#*"$2"}" "$2" "${3:-0}" "$((${4:-0}+1))";;
(*) return "$((${4:-0}<${3:-1}))";;esac
do : "${_occur:+$((_occur=$4))}";done
2~3개의 매개변수가 필요합니다. 그 이상을 제공하면 결과가 왜곡됩니다. 다음과 같이 사용할 수 있습니다.
_occur=0; occur ... . 2 && echo "count: $_occur"
.
...in이 ...
2번 이상 나타나면 발생 횟수를 인쇄합니다. 이와 같이:
count: 3
$_occur
비어 있거나 unset
호출되면 쉘 변수에 전혀 영향을 주지 않으며, 1회 미만 발생 return
하면 1입니다 . 또는 두 개의 인수만 사용하여 호출하면 에 있지 않은 경우에만 1이 됩니다 . 그렇지 않으면 0을 반환합니다."$2"
"$1"
"$3"
return
"$2"
"$1"
따라서 가장 간단한 형태로 다음을 수행할 수 있습니다.
occur '' . && echo yay || echo shite
...인쇄...
shite
...하지만...
occur . . && echo yay || echo shite
...인쇄됩니다...
yay
$2
약간 다르게 작성하고 및 (*"$2"*)
문에서 따옴표를 생략할 수도 있습니다 "${1#*"$2"}"
. 이렇게 하면 sh[io]te
일치 테스트와 같은 일치를 위해 쉘 글로브를 사용할 수 있습니다.
답변3
나는 방금 sed를 사용하여 문장을 나누고 루프의 각 줄을 비교했습니다. 왜냐하면 그것이 나에게 가장 쉬운 방법처럼 보였기 때문입니다(여기 있는 누구에게도 불쾌감을 주지 않으며 나도 전문가가 아니므로 이유가 있을 수 있습니다). 사람들은 이것을 하지 않습니다. 확실하지 않습니다)
string="a a a a a asd gsam en"
count=$(echo $string | sed 's/ /\n/g' | grep -w 'a' | wc -l)
echo $count
내가 실행할 때
mark@gamerblock:~$ string="a a a a a asd gsam en"
mark@gamerblock:~$ count=$(echo $string | sed 's/ /\n/g' | grep -w 'a' | wc -l)
mark@gamerblock:~$ echo $count
5
입력 매개변수가 있는 스크립트로
#!/bin/bash
echo "Enter your string"
read string
echo "Enter what you want substring counted"
read substring
count=$(echo $string | sed 's/ /\n/g' | grep $substring | wc -l)
echo $count
달리는 동안
mark@gamerblock:~$ ./substring.sh
Enter your string
peter piper picked a pack of pickled peppers. a pack of pickled peppers peter piper did pick.
Enter what you want substring counted
peter
2
mark@gamerblock:~$ ./substring.sh
Enter your string
peter piper picked a pack of pickled peppers. a pack of pickled peppers peter piper did pick.
Enter what you want substring counted
p
0
정확히 일치하는 항목이 필요하지 않으면 grep에서 -w 매개변수를 제거하세요.
mark@gamerblock:~$ ./substring.sh
Enter your string
peter piper picked a pack of pickled peppers. a pack of pickled peppers peter piper did pick.
Enter what you want substring counted
p
12
mark@gamerblock:~$