나는 다음 표현을 알고 있습니다.
echo "bob alice robert alice" | awk '{print index($0,"alice")}'
5
첫 번째 앨리스와 일치하는 인덱스가 출력됩니다. 일치하는 모든 인덱스를 얻을 수 있는 방법이 있나요? ,예를 들어:
echo "bob alice robert alice" | awk 'unknown magic'
5:18
답변1
POSIX 도구 상자 사용:
echo "bob alice robert alice"| p=alice awk '
{
while(1) {
$0 = substr($0, RSTART+RLENGTH)
match($0, ENVIRON["p"])
if (RSTART == 0) break
i = i ? i+RSTART+RLENGTH-1 : RSTART
print i
}
}' | paste -sd: -
5:18
답변2
이것은 당신의 일을 해야 합니다:
echo "bob alice robert alice" |\
awk '{
s=$0
o=0
m="alice"
l=length(m)
i=index(s,m)
while (i>0) {
o+=i
print o
s=substr(s,i+l)
o+=l-1
i=index(s,m)
}
}'
":"(콜론)을 사용하여 형식을 지정하려면 파이프할 수 있습니다.
paste -s |tr '\t' ':'
답변3
echo "bob alice robert alice"| awk '
{for( i=1;i<=NF;i++) {
if ( $i == "alice") {
printf index($0,"alice") ":"
gsub("alice","xxxxx",$i)
}
}
print " "
}'