sed를 사용하여 파일에서 블록을 교체하려고하지만 성공하지 못했습니다.sed에서 블록 교체
예. 내가 이것을 대체 할 : 트릭을 할 것입니다
int i = 0;
while(i < MAX_LOOPS) {
printf("Hello World!");
++i;
}
sed를 사용하여 파일에서 블록을 교체하려고하지만 성공하지 못했습니다.sed에서 블록 교체
예. 내가 이것을 대체 할 : 트릭을 할 것입니다
int i = 0;
while(i < MAX_LOOPS) {
printf("Hello World!");
++i;
}
다음하지만 아주 기본적인 방법으로, 즉 그것은 강력한 아니라도 아니다 서식 걱정 않습니다
이와for(int i = 0; i < MAX_LOOPS; ++i) {
printf("Hello World!");
}
합니다.
들/위해 (내가 < MAX_LOOPS, I = 0을 int로 ++ I)/INT I = 0; \ nwhile (I < MAX_LOOPS)/g /의 printf ("안녕하세요!");/{ a ++ i; }
이것은 간단한 해킹 일 뿐이지 만 당신을 끌어들일만큼 충분해야합니다. Sed는이 작업을위한 최선의 도구가 아닐 수도 있지만 Sed에서 수행하는 방법을 아는 것은 상처가되지 않습니다.
이 당신을 위해 작동 될 수 있습니다
sed -e '/^for.* {/,/^}/{/for/{i\int i = 0;'\
> -e ';c\while(i < MAX_LOOPS) {'\
> -e '}};/^}/i\++i' file
int i = 0;
while(i < MAX_LOOPS) {
printf("Hello World!");
++i
}
sed -r '
/for\s*\(.*;.*;.*\)/!b
s#.*\((.*);(.*);(.*)\).*#\1\nwhile (\2) {\a\3#
h
s/.*\a//
x
s/\a.*//
:X
N
/}/!{bX}
G
s#(.*)\n(.*)\n(.*)#\1\n \3\n\2#
' file
int i = 0
while (i < MAX_LOOPS) {
printf("Hello World!");
++i
}
sed -e '
/for(int i = 0; i < MAX_LOOPS; ++i) {/,/}/ {
/}/ a \
int i = 0;\
while(i < MAX_LOOPS) {\
printf("Hello World!");\
++i;\
}
d
}
' YourFile
입력 및 출력 사이에 다른 동작이 사용됩니다. 현재 작업 버퍼에이 정보를 넣지 않고 출력에 정보를 추가하십시오 (입력 및 변조에 의한 피드). 그래서 삭제는이 필드를 건드릴 수 없지만 입력 (현재 줄 )은입니다.
대신 왜 사용 하시겠습니까? 에 대한? 내게는 가독성과 유지 보수성면에서 엄청난 다운 그레이드가되는 것 같다. – hlovdal
여기에있는 어려움은 while() {} 루프 내에서 처리해야 할 것이 있습니다. 하나의 간단한 명령인데 중첩 된 블록 인 경우에는 다른 것입니다. – Beano