아래 줄의 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에는 적용되지 않습니다.

관련 정보