如何向 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"
}

相关内容