2011-03-11 5 views
2

저는 하드웨어 공급 업체가 제공하는 sed (여기에서 자습서를 찾았습니다 : Grymoire) ASCII 파일로 마사지를 해왔습니다. 파일에는여러 줄로 된 Sed가 패턴을 대체하지 않습니다

Model-Manufacturer:D12-500 
Test_Version:2.6.3 

같은 구조를 가지고 그러나 우리가받는 일부 파일이 무작위로 "깨진"하고 대한 항목이 그리워 "모델 제조 업체 :"

Model-Manufacturer:D12-500 
Test_Version:2.6.3 
Model-Manufacturer:H24-700 
Test_Version:2.6.3 
Test_Version:2.6.3 
Model-Manufacturer:R15-300 
Test_Version:2.6.3 

내가 Sed의이 문제를 해결하려면 및 "Model-Manufacturer : N/A"에 대해 누락 된 항목을 "Test_Version : 2.6.3"의 두 번째 항목 앞에 배치하십시오. 이것은 내 코드입니다

sed -n ' 
/Test_Version/ { 
# found "Test_Version" - read in next line 
     N 
# look for "Test_Version" on the second line 
# and print if there. 
     /\n.*Test_Version/ { 
# found it - now edit making one line 
       s/Test_Version/Model-Manufacturer:N/A/ 
     } 
}' infile > outfile 

작동하지 않습니다. 교체를하기 전에 각 "Test_Version"및 "Model_Manufacturer"의 위치를 ​​기억해야한다고 생각합니다. 나는 sed로 이것을 할 수 있을까?

미리 감사드립니다.

답변

2
는 귀하의 대체를 변경

에이". 빈 왼쪽을 사용하면 가장 최근의 일치 항목을 재사용합니다. 앰퍼샌드는 일치 항목을 오른쪽으로 복사합니다.

또한 -n을 제거해야합니다.

+0

나의 대타는 오프되었다. 너의 것이 속임수 였어. 고맙습니다. 개인적인 메모에서, sed는 정말로 **를 찰깍 소리가납니다. – Chris

1

달성하고자하는 것을 이해하면 매우 가까워집니다. 내가 다음에 대체 명령을 변경 생각하면 작동합니다 :/당신이 N "에서 슬래시를 이스케이프 할 필요가 없습니다 의미 다른 구분 기호를 사용

s||\nModel-Manufacturer:N/A&| 

:

s/\nTest_Version/\nMode-Manufacturer:N\/A\nTest_Version/ 
관련 문제