파일에 몇 줄의 코드를 삽입해야 합니다. 문제는 특정 함수 호출 뒤와 그 뒤의 세미콜론 뒤에 삽입하고 싶다는 것입니다.
를 통해 이를 달성하고 싶지만 sed
이유를 모르겠습니다.
예:
소스 코드 조각:
10 printf("asdf");
11
12 myFunc()
13
14 ;
여기서는 호출 후에 코드 조각을 삽입하고 싶지만 myFunc()
13행이 아닌 15행에 직접 삽입하고 싶습니다.
삽입 후 필요한 코드:
10 printf("asdf");
11
12 myFunc()
13
14 ;
15 SNIPPET
내 최선의 시도는 다음과 같습니다.
sed -e '13 i\SNIPPET'
이것은 분명히 세미콜론을 "기다리지" 않습니다.
그렇다면 이러한 조건을 결합하여 줄 번호 *** 뒤의 첫 번째 세미콜론 뒤에 코드 조각을 삽입할 수 있는 방법이 있습니까?
답변1
어때요?
sed '
/myFunc()/!b
:1
s/;/; SNIPPET/;t
n;b1'
또는 13행의 경우:
sed '
13!b
:1
s/;/; SNIPPET/;t
n;b1'
답변2
나는 사용하지 않을 것입니다 sed
. 본질적으로 행 지향적 특성으로 인해 이 목적에 좋은 도구라고 생각하지 않습니다.
나는 다음을 추천한다:
#!/usr/bin/env perl
use strict;
use warnings;
while (<>) {
#print current line (because we insert _after)
print;
#extract the number. If you need to work on _actual_ line number, you need $.
my ($num) = m/^(\d+)/;
if ( $num > 13 and m/;/ ) {
#print snippet, bail out
print ++$num, " SNIPPET\n";
last;
}
}
#print rest of file
print <>;
참고 - 이는 귀하의 예를 기반으로 콘텐츠에서 숫자를 추출합니다. 실제 줄 번호를 원하는지 확실하지 않습니다. 물론 sed -e '13 ..'
그럴 것이라는 암시가 있기는 하지만요.
이 경우:
if ( $. > 13 and m/;/ ) {
print "SNIPPET\n";
last;
}