sed에 매개변수를 전달하는 방법은 무엇입니까?

sed에 매개변수를 전달하는 방법은 무엇입니까?

더 정확하게는 - sed를 호출하는 프로그램에 매개변수를 어떻게 전달합니까? - 해당 매개변수를 어떻게 "전달"합니까?

"source_code.sc" 파일이 있습니다.
sed 스크립트 "find_expect"가 있습니다.

#n
/expect/{
=
p
}

파일을 반복하는 프로그램 내부에서 호출합니다.

sed -f find_expect.= source_code.sc

print는 줄 번호를 찾습니다. 예:

712
      expect(it).to be_true

그러나 검색은 "expect"를 검색하도록 하드코딩되어 있는데, 검색 텍스트 자체도 전달되도록 이를 어떻게 변경할 수 있습니까? 또한 find를 사용하여 파일을 반복하고 있으므로 현재 많은 파일에 대해 sed가 호출되고 있습니다. 예를 들어, "blob"을 검색하려면 파일을 반복하는 프로그램이 이를 다음과 같이 호출합니다.

sed -f find_expect.= "$file_from_loop" source_code.sc 'blob'
# with 'blob' being passed in from the main script
# which would be invoked with `./change_all.sh 'blob'
# I don't pass the file pattern in to this main call as I just
# recursively do all files (that match a pattern) from the current directory down

답변1

거기에서 다시 구현 하려고하는 것 같습니다 grep. sed그냥 사용하는 대신 :

grep -n -- "$var" file

var문자 그대로 일치시킬 정규식 메타 문자를 포함하는 경우 -F다음 옵션을 제공하십시오 grep.

grep -nF -- "$var" file

var원하는 패턴이 들어있습니다 .

grep(1)매뉴얼 페이지 에서 :

-n, --줄 번호
입력 파일의 각 출력 줄 앞에 1부터 시작하는 줄 번호를 붙입니다. (-n은 POSIX에 의해 지정됩니다.)

주장하는 경우 sed이 목적을 위한 함수를 만들 수 있습니다.

notgrep (){
    if [ $# -ne 2 ];then
        echo "Usage: notgrep <pattern> <file>"
        exit 1
    end
    sed -n "/$1/{
        =
        p
    }" "$2"
}

관련 정보