전제: 내 것을 수정 중이고 .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)
다음 과 같습니다 .vi
vim
ed
ex ~/.profile <<EOF
0r !figlet -f slant "p r o f i l e" | sed 's/^/\#/'
w
EOF
파일의 첫 번째 줄 바로 앞에 Figlet 파이프라인의 결과를 삽입하고 저장합니다.
답변2
변형 과 ed(1)
함께 작동해야 하는 사용 방법 중 하나 입니다.GNU
BSD
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
선호합니다.0a
1i
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