更准确地说 - 如何将参数传递给然后调用 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"
}