2013-06-03 5 views
4

두 번째 줄의 파일을 바꾸고 싶습니다. 마지막 줄에 $ 사용을 알고 있지만 두 번째 줄을 끝내는 방법을 모릅니다.sed가 파일의 두 번째 마지막 줄을 대체합니다.

parallel (
{ 
ignore(FAILURE) { 
build("Build2Test", BUILDFILE: "", WARFILE: "http://maven.example.com/130602.0.war", STUDY: "UK", BUG: "33323") 
}}, 
) 

나는 내가 , 쉼표를 제거 할 짧은 }}}},을 대체 할하지만이 파일은 많은 다른 코드 그래서 난 내가 파일의 끝에서 두 번째 줄을 사용할 필요가 패턴 일치를 사용할 수 있습니다.

답변

6

일 (당신이 의견을 모두 제거해야합니다 일부 시스템에서 그주의)해야 다음 :

sed '1 {  # if this is the first line 
    h    # copy to hold space 
    d    # delete pattern space and return to start 
} 
/^}},$/ {  # if this line matches regex /^}},$/ 
    x    # exchange pattern and hold space 
    b    # print pattern space and return to start 
} 
H    # append line to hold space 
$ {    # if this is the last line 
    x    # exchange pattern and hold space 
    s/^}},/}}/  # replace "}}," at start of pattern space with "}}" 
    b    # print pattern space and return to start 
} 
d    # delete pattern space and return to start' 

또는 소형 버전 :

sed '1{h;d};/^}},$/{x;b};H;${x;s/^}},/}}/;b};d' 

예 :

$ echo 'parallel (
{ 
ignore(FAILURE) { 
build("Build2Test", BUILDFILE: "", WARFILE: "http://maven.example.com/130602.0.war", STUDY: "UK", BUG: "33323") 
}}, 
)' | sed '1{h;d};/^}},$/{x;b};H;${x;s/^}},/}}/;b};d' 
parallel (
{ 
ignore(FAILURE) { 
build("Build2Test", BUILDFILE: "", WARFILE: "http://maven.example.com/130602.0.war", STUDY: "UK", BUG: "33323") 
}} 
) 
7

아는 경우 N 번째 줄을 어떻게 바꿀 것인지 간단히 파일을 역순으로 바꿉니다. 다른 sed 솔루션만큼 전문적이지는 않지만 작동합니다. :)

tail -r <file | sed '2s/}},/}}/' | tail -r >newfile 

다음 입력에서

}}, 
}}, 
}}, 
}}, 
}}, 

}}, 
}}, 
}}, 
}} 
}}, 

tail -r 리눅스의 tac 명령의 BSD의 동일합니다. Linux의 경우 OS X 또는 FreeBSD에서 tac을 사용하려면 tail -r을 사용하십시오. 동일 작업을 수행하는 봇 : 파일을 깔끔한 순서로 인쇄합니다 (마지막 줄 인쇄가 먼저 인쇄됩니다).

3

당신이 (GNU가 나오지도)에 대한이 작동 될 수 있습니다

sed '$!N;$s/}},/}}/;P;D' file 

는 패턴 공간에 두 개의 라인을 유지하고에 - 파일의 마지막에 필요한 패턴을 대체합니다. ,

tac file | sed '2 s/,$//' | tac 

다시 "파일"에 결과를 저장하는 명령

> file.new && mv file file.bak && mv file.new file 

이 추가 :

5
이 2 줄에 파일 작업을 역

, 다음 파일을 다시 반전 또는 ed 스크립트 사용

ed file <<END 
$-1 s/,$// 
w 
q 
END 
관련 문제