다음 줄의 sed 명령은 무엇을 수행합니까?

다음 줄의 sed 명령은 무엇을 수행합니까?

스크립트 파일을 분석하다가 다음 줄을 발견했습니다.

sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' /home/jboss/runJBOSSEAP.sh

나는 아직도 이 명령이 무엇을 하는지 알 수 없다. 나는 이것이 -i인라인 작업이라는 것을 알고 있습니다. 하지만 그것이 무엇을 하는지 나는 아직도 모른다. 이 줄을 이해하도록 도와주세요.

답변1

sed -i  

-i파일을 제자리에서 편집함을 나타냅니다. 즉, 동일한 이름으로 새 버전을 작성하는 것입니다.

/JBOSS_HOME\/bin\/run.sh/

슬래시로 구분된 패턴으로, 백슬래시로 인용된 패턴에 슬래시가 포함되어 있으므로 JBOSS_HOME/bin/run.sh.(실제로는 정규식이므로 점은 모든 문자와 일치합니다.)

i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp '

패턴 일치를 i사용하여 줄을 삽입할 때(현재 줄 앞에) 명령이 실행됩니다. 추가할 줄은 백슬래시로 구분되므로 문자열이 추가됩니다 export TMP_FOLDER=$JBOSS_HOME/server/default/tmp.

/home/jboss/runJBOSSEAP.sh

대상 파일 이름.

예를 들어

$ echo JBOSS_HOME/bin/run.sh > pla 
$ sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' pla
$ cat pla
export TMP_FOLDER=$JBOSS_HOME/server/default/tmp 
JBOSS_HOME/bin/run.sh

예시와 거의 똑같네요여기

답변2

ilkkachu의 답변은 훌륭하고 광범위하며 지원적입니다. BSD sed(OS X에서와 같이)를 사용하는 경우 여기에 참고 사항을 추가하십시오. 이것:

sed -i '/JBOSS_HOME\/bin\/run.sh/i \export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' foo 
sed: 1: "foo": invalid command code f

작동하지 않습니다. BSD sed와 함께 작동하게 하려면 먼저 -i다음과 같은 옵션을 수정 해야 합니다 sed -i."". 또한 다음과 같이 별도의 줄에 삽입 내용을 입력해야 합니다.

sed -i."" '/JBOSS_HOME\/bin\/run.sh/i \
export TMP_FOLDER=$JBOSS_HOME/server/default/tmp ' foo 

그러나 이는 OS X에서 BSD sed를 사용하는 경우에만 적용됩니다. GNU sed에서는 작동하지 않습니다.

관련 정보