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

そこから再実装しようとしているようですgrepsed単に使用する代わりに:

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"
}

関連情報