다음 예와 같이 oooo를 1, 2, 3, ...으로 바꾸고 싶습니다.
~에서
> cat demo.snippet
snippet anova.cca "anova.cca fun"
anova.cca(
,${oooo:object}
${oooo:,...}
,permutations = ${oooo:how(nperm = 999)}
,by = ${oooo:NULL}
)
endsnippet
snippet adonis "adonis fun"
adonis(
,${oooo:formula}
,data = ${oooo:NULL}
,permutations = ${oooo:999}
)
endsnippet
snippet anosim "anosim fun"
anosim(
${oooo:,...}
,${oooo:grouping}
,permutations = ${oooo:999}
)
endsnippet
도착하다
snippet anova.cca "anova.cca fun"
anova.cca(
,${1:object}
${2:,...}
,permutations = ${3:how(nperm = 999)}
,by = ${4:NULL}
)
endsnippet
snippet adonis "adonis fun"
adonis(
,${1:formula}
,data = ${2:NULL}
,permutations = ${3:999}
)
endsnippet
snippet anosim "anosim fun"
anosim(
${1:,...}
,${2:grouping}
,permutations = ${3:999}
)
endsnippet
답변1
Python(버전 2 또는 3) 사용:
from __future__ import print_function
oooo = None
with open('demo.snippet') as fp:
for line in fp:
if line.startswith('snippet '):
oooo = 1
while 'oooo' in line:
line = line.replace('oooo', str(oooo), 1)
oooo += 1
print(line, end='')
oooo
이는 한 줄에서 여러 번 발생하는 경우에도 작동합니다.
답변2
가능한 Perl 솔루션
perl -00 -F/\nendsnippet\n/ -pe '$n=1; s/oooo/$n++/ge' demo.snippet
답변3
perl
메모리의 전체 파일을 차지하지 않는 또 다른 하나는 다음과 같습니다 .
perl -pe 's/oooo/++$i/ge; $i = 0 if /endsnippet/' <file
답변4
아래 코드를 사용했는데 awk
잘 작동하는 것 같습니다.
awk 'BEGIN {x=0}
{ if ($0~/oooo/) {x++; gsub(/oooo/,x); print $0}
else if ($0~/snippet/) {x=0; print $0}
else {print $0}}' demo.snippet
편집: 이것은 다음과 같이 다시 작성할 수 있습니다.
awk 'BEGIN {x=0}
/oooo/ {x++; gsub(/oooo/,x); print $0 ; next }
/snippet/ {x=0; }
{print } ' demo.snippet