sed 또는 awk 스트림에 머리글 및/또는 바닥글을 추가하는 방법은 무엇입니까?

sed 또는 awk 스트림에 머리글 및/또는 바닥글을 추가하는 방법은 무엇입니까?

sed와 awk를 통해 많은 출력이 있습니다.

출력에 START 접두사를 추가하고 답변에 END 접미사를 추가하는 방법은 무엇입니까?

예를 들어, 내가 가지고 있는 경우

All this code
on all these lines
and all these

어떻게 얻을 수 있나요?

START
All this code
on all these lines
and all these
END

?

내 시도는 다음과 같습니다

awk '{print "START";print;print "END"}'

하지만 난 얻었어

...
START
    All this code
END
START
    on all these lines
END
START
    and all these
END

답변1

이것은 그림과 같이 작동합니다제이슨 라이언:

awk 'BEGIN{print "START"}; {print}; END{print "END"}'

답변2

sed이는 다음을 통해 수행할 수 있습니다.

sed -e $'1i\\\nSTART' -e $'$a\\\nEND'

1i방법1번째 줄 앞에 삽입하세요 $a.마지막 줄 다음에 기다리세요. 구문은 $'…'bash에 따라 다릅니다. 다른 셸에서는 다음을 통해 이 작업을 수행할 수 있습니다.

sed -e '1i\ Enter
시작' -e '$a\ Enter
end'Enter

경고: 질문에 "나는 많은 출력이 있습니다..."라고 표시됩니다. 데이터 없이 위 명령을 실행하면 명령이 실제로 거기에 의존하기 때문에 어떤 출력도 얻지 못할 것입니다.존재하다 첫 번째 행과 마지막 행. 다른 두 답변은 입력이 비어 있어도 머리글과 바닥글을 제공합니다.

답변3

이미 sed를 사용하고 있다면 다음을 사용하여 1첫 번째 줄과 $마지막 줄을 일치시킬 수 있습니다.스콧의 대답). 이미 awk를 사용하고 있다면 BEGIN블록을 사용하여 첫 번째 줄 앞에서 코드를 실행하고 END블록을 사용하여 마지막 줄 이후에 코드를 실행할 수 있습니다(참조마이클 듀란트의 답변).

머리글과 바닥글만 추가하면 됩니다 . echo및 를 사용하세요 cat.

echo START
cat
echo END

파이프라인에서 여러 명령을 실행하려면 { … }해당 명령이 복합 명령임을 파서에 알립니다.

content-generator |
{ echo START; cat; echo END; } |
postprocessor

답변4

sed -e '1s/.*/START\n&/g' -e '$s/.*/&\nEND/g' filename

START
All this code
on all these lines
and all these
END

파이썬

#!/usr/bin/python
k=open('filename','r')
o=k.readlines()
for i in range(0,len(o),1):
    if ( i == 0 ):
        print "START"
        print o[i].strip()
    elif ( i == (len(o)-1)):
        print o[i].strip()
        print "END"
    else:
        print o[i].strip()

산출

START
All this code
on all these lines
and all these
END

관련 정보