より正確には - 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"
}