파일 시작 부분에 여러 줄의 텍스트(예: 명령의 o/p)를 삽입하려면 어떻게 해야 합니까?

파일 시작 부분에 여러 줄의 텍스트(예: 명령의 o/p)를 삽입하려면 어떻게 해야 합니까?

전제: 내 것을 수정 중이고 .profile큰 ASCII 텍스트를 추가하고 싶습니다.윤곽" figlet에 의해 생성됨논평파일의 시작 부분에.

여러 단계로 수행할 수 있지만 가능한 가장 짧은 단계로 수행할 수 있는 방법을 찾으려고 노력하고 있습니다.

필레큰 ASCII 텍스트를 생성하고 #다음을 사용하여 각 줄의 시작 부분에 추가합니다 sed.

figlet -f slant "p r o f i l e" | sed -n 's/^.*/#&/p'

위에서 출력:

#                               ____   _    __      
#    ____     _____   ____     / __/  (_)  / /  ___ 
#   / __ \   / ___/  / __ \   / /_   / /  / /  / _ \
#  / /_/ /  / /     / /_/ /  / __/  / /  / /  /  __/
# / .___/  /_/      \____/  /_/    /_/  /_/   \___/ 
#/_/

이제 의 시작 부분에 추가하고 싶습니다 .profile. 지금까지 시도한 것: sed그러나 xargs 원하는 결과를 얻지 못했습니다.한 줄로 전체 과정을 완료하세요주문하다.

분명 두 줄로 나누어서 해결할 수 있는데, 한 줄로 해결할 수 있는 방법은 없을까요?

답변1

또는 /는 ex(1)다음 과 같습니다 .vivimed

ex ~/.profile <<EOF
0r !figlet -f slant "p r o f i l e" | sed 's/^/\#/'
w
EOF

파일의 첫 번째 줄 바로 앞에 Figlet 파이프라인의 결과를 삽입하고 저장합니다.

답변2

변형 과 ed(1)함께 작동해야 하는 사용 방법 중 하나 입니다.GNUBSD

printf '%s\n' '0a' "$(figlet -f slant "p r o f i l e" | sed -n 's/^.*/#&/p')" "" . w | ed -s ~/.profile
  • printf '%s\n'비슷 echo하지만 더 일반적입니다.
  • "$( )"명령 대체라고도 하며 명령의 출력을 캡처합니다. 이유 때문에 큰따옴표로 묶여 있습니다.
  • 0버퍼/파일의 주소 또는 줄 번호입니다. 이것은 첫 번째 줄입니다. 작동해야 하지만 빈 파일에서는 실패하기 때문에 1i선호합니다.0a1i
  • a는 추가 또는 추가를 나타내는 명령입니다.
  • ""출력 후에 빈/새 줄을 만드십시오.figlet
  • .ed에게 편집이 끝났다고 말해주세요.
  • w쓴다는 뜻입니다.
  • 그런 다음 |파이프ed
  • -s깃발을 든다는 것은 침묵을 뜻한다.

답변3

그 과정에서 GNU sed를 사용할 수 있습니다.

sed -i '1{H;s/.*/figlet -f slant "p r o f i l e"/e;s/^/#/mg;G}' ~/.profile

패턴 공간을 실행하는 e첫 번째 명령의 수정자(내가 만든 Figlet 명령)에 주목하세요 .s

답변4

시도해 보세요(테스트되지 않음)

figlet -f slant "p r o f i l e" | sed -n 's/^.*/#&/p' | cat - .profile

관련 정보