더 정확하게는 - 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"
}