2016-11-29 1 views
-1

한 줄 (string1)을 코드 스 니펫으로 바꾸고 싶습니다. 내가 나오지도 명령으로 할 수있는 :한 줄을 여러 줄로 바꾸거나 그 반대로 바꾸기

sed -i "s|..|a very long code|g" 

코드는 세 개의 행을 포함 할 수있다. 그러나 코드 스타일을 사용하려면 코드가 각 행의 특정 열 아래에 있어야합니다. 포맷팅을 위해 "Enter"키를 사용했습니다. "Enter"키를 누르면 "unterminated s command"오류가 발생합니다.

좋은 bash 명령이 있습니까?

또한이 여러 줄 코드를 한 줄로 바꾸는 방법은 무엇입니까? 코드에는 %, * 및 일부 정규식 문자가 있습니다. 패턴 공간이 없어야합니다.

+0

실제 문제는 "다중 선 sed 표현"작업을하고 싶습니다. sed 표현식에 줄 연속을 포함하는 것이 좋습니다. 줄 연속으로 "\"를 사용할 때. 's '명령 오류가 종결되었습니다. 감사합니다. – nathan

답변

2

줄 바꿈을 나타내려면 \n을 사용하십시오.

:~> sed "s|string1|#include \"test.h\"\n#include \"release.h\"|g" 

포맷 루프는 로터리의 약간은 당신이 할 수 코딩

for (int i=0; i< 100; i++){ 
    sleep(1); 
} 

를 구성

#include "test.h" 
#include "release.h" 

인쇄겠습니까

:~> echo sleep100 | sed "s|sleep100|\ 
for (int i=0; i< 100; i++){\n\ 
sleep(1);\n}|g" 

을 필요에 따라 공백을 입력 할 수 있습니다를 인쇄 할 것인가 ev sed 명령의 각 줄 시작 부분에 필요한 공백을 유지하십시오.

:~> bs4="$(printf '%b' '\b' '\b' '\b' '\b')" ;\ 
    echo sleep100 | sed "s|sleep100|\ 
    ${bs4}for (int i=0; i< 100; i++){\n\ 
    sleep(1);\n}|g" 

트릭의 본질은 다른 \b 탈출을 해석 sed의 한계를 극복하는 것입니다. 이스케이프 시퀀스를 사용하는 대신 실제 백 스페이스 문자를 배치하여 여분의 공간을 중얼 거립니다.

P. 당신은 즉시 각각 \$, \%\*로 백 슬래시 이스케이프 등의 대체 표현 $, %* 같은 특수 문자를 가질 수있다.

+1

예, 알고 있습니다. 내 요점은 '\ n'에 관한 것이 아닙니다. 문제는 코드가 너무 길어서 3,4 줄을 차지할 수 없다는 것입니다. 그리고 그 형식은 추악합니다. 내 sed 명령은 if 절에있을 것입니다. 그래서 "sed"앞에 들여 쓰기가 있습니다. 그러나 나머지 2 또는 3 라인은 라인의 맨 처음부터 시작됩니다. 이것은 매우 끔찍한 스타일입니다. 내 진짜 질문은 sed 명령을 형식화하는 방법이다. – nathan

+0

@ user3529352 그냥 백 슬래시로 개행 문자를 이스케이프 처리한다. 마지막 예제를 어떻게 편집했는지 확인하십시오. –

+0

sed -i "s | string1 | \ line1 \ n \ line2 \ n \ line3 | g"afg. 이것은 작동하지 않습니다. 오류 : sed : -e 표현식 # 1 .. 종료되지 않은's '명령 – nathan

관련 문제