bash/awk/sed에서 표준 입력의 데이터를 사용하여 파일을 내부에서 변경하는 방법

bash/awk/sed에서 표준 입력의 데이터를 사용하여 파일을 내부에서 변경하는 방법

bash에서 파일(예: .bashrc)이 필요한 간단한 명령이나 함수를 만들고 싶습니다.

alias ..="cd .."
alias ls="ls -hNFCs --color=auto -I NTUSER.DAT\* -I ntuser.dat\*"
alias mv="mv -i"
alias cp="cp -i"
alias rm="rm -i"
alias df="df -h"
alias du="du -h"
alias curl="curl -s"
alias c1="awk '{ print \$1 }'"
alias c2="awk '{ print \$2 }'"
alias c3="awk '{ print \$3 }'"
alias c4="awk '{ print \$4 }'"
alias dcp="docker container prune -f"
alias sup="scoop update \*"
###
alias docker='docker -C /trajano/docker'

그런 다음 기능을 사용하여 다음과 같은 작업을 수행하고 싶습니다.

pullbashrc() {
  COMMONRC=$(curl -s https://gist.github.com/trajano/myrc)
  CUSTOMRC=$(??all contents from ### and including ###)
  echo $COMMONRC $CUSTOMRC > ~/.bashrc
}

따라서 Gist의 bashrc를 결합하지만 로컬 사용자 정의를 추가합니다.CUSTOMRC

CUSTOMRC를 수행하는 방법을 알고 있는 것 같습니다.

tail -n +$(grep -n "###" ~/.bashrc | cut -d ':' -f1) ~/.bashrc

내가 원하는 대로 되는 것 같습니다. 몇 가지 사항만 결합하면 답을 얻을 수 있을 것 같습니다.

답변1

이것이 내가 끝낸 것입니다. 임시 파일을 없앨 수 있었으면 좋겠어

pullbashrc() {
  curl -s https://gist.githubusercontent.com/trajano/71553de32f335092ad62f2f301cadd0f/raw/7006ef1c1bf10520e47089b385b8f9670d5ce96e/.bashrc > /tmp/bashrc
  tail -n +$(egrep -n "^###" ~/.bashrc | cut -d ':' -f1) ~/.bashrc >> /tmp/bashrc
  mv -f /tmp/bashrc ~/.bashrc
}

답변2

개인 bashrc 콘텐츠를 별도의 파일로 분할한 다음 가져오는 것을 고려해 보세요.

일회성 설정:

sed -n '/^###/,$p' ~/.bashrc > ~/.bashrc.personal

별칭 정의:

alias pullbashrc='{ curl -s https://gist.githubusercontent.com/trajano/71553de32f335092ad62f2f301cadd0f/raw/7006ef1c1bf10520e47089b385b8f9670d5ce96e/.bashrc; [ -r ~/.bashrc.personal ] && printf '\n%s\n' "source ~/.bashrc.personal"; } > ~/.bashrc'

기존 파일에 후행 줄바꿈이 포함되어 있지 않은 것 같기 때문에 앞에 줄바꿈을 포함시켰습니다. 그렇지 않으면 추가 줄이 무해할 것입니다. 복합 명령문에는 ~/.bashrc.personal출력에 포함되도록 요청하기 전에 읽을 수 있는 파일이 있는지 확인하는 테스트가 있습니다.

제가 이런 일을 하게 된다면, 저는 여러분이 했던 것처럼 기능 방향으로 가서 일부 오류 검사(아마도 네트워크 연결이 닫혀 있을 수도 있음)를 추가하여 ~/.bashrc잘림으로 인해 기존 파일 내용이 삭제되지 않도록 할 것입니다.

관련 정보