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"

그러면 정규식과 일치하는 첫 번째 줄까지 모든 줄이 선택된 다음 해당 범위 내에서 식과 일치하는 줄에만 명령이 적용되고 다른 모든 줄은 변경되지 않은 상태로 전달됩니다.

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

관련 정보