sed를 사용하여 "/>"를 검색하는 방법

sed를 사용하여 "/>"를 검색하는 방법

/>내 필요는 디렉토리의 모든 파일에 대한 첫 번째 문자열 뒤에 새 문자열을 추가하는 것입니다.

이것은 내 스크립트입니다.

#!/bin/bash

find ./ -type f -print0 | while IFS= read -r -d '' myfile; do
    sed -i '0,/\/>/asome text here' $myfile
done

그러나 모두 \n일치하는 것 같습니다. 예를 들어 파일이 다음과 같은 경우:

abc
def
<abc/>
<abc/>

스크립트를 실행하면 다음과 같은 결과를 얻게 됩니다.

abc
some text here
def
some text here
<abc/>
some text here
<abc/>

첫 번째 항목에 대해 새 문자열을 추가 />하지만 첫 번째 줄 앞의 각 줄에 대해 새 문자열도 추가합니다 />.

답변1

예. 이 표현식을 사용 0,/regex/하면 뒤에 오는 명령( )이 다음 a에 적용 됩니다.모든 라인정규식의 첫 번째 일치까지(및 포함).

내 생각엔 당신이 하고 싶은 것 같아요

sed -i '0,/regex/{//a text
}' "$myfile"

이렇게 하면 정규 표현식이 처음 일치하기 전의 모든 행이 선택되고 해당 범위에서 표현식과 일치하는 행에만 명령이 적용되며 다른 모든 행은 변경되지 않은 채 전달됩니다.

추가하는 텍스트의 끝을 나타내려면 리터럴 줄 바꿈이 필요합니다.

관련 정보