使用上下文查看文件行的命令行方式?

a p*_*erd 1 linux unix command-line

我想在 Linux 的命令行上显示带有上下文的文件的某一行或几行,有点像统一的差异:

$ (something) -l 154 stuff.py

   150:  def foo(bar):
   151:    """
   152:    Does the thing.
   153:    """
>> 154:    x = some_calculation()
   155:    y = something_else()
   156:    x.baz(y)
   157:    return x.quux()
Run Code Online (Sandbox Code Playgroud)

是否有捷径可寻?

del*_*ray 7

通常,当我在 grep 中搜索某些内容时,我会打开上下文选项 (-C)。因此,如果您想要基于搜索关键字的上下文,您可以这样做:

grep -C3 searchpattern file
Run Code Online (Sandbox Code Playgroud)

这将为您提供 3 行以上和 3 行以下的上下文。根据需要增加/减少。您还可以使用 -A 数字(上图)和 -B 数字(下图)在上方和下方显示特定数量。如果您想专门按行号执行此操作,可以尝试使用 nl 命令对行进行编号,然后根据匹配的编号使用 grep -C3。例如获取第 26 行:

nl -n ln -ba inputfile | grep -C3 "^26 "
Run Code Online (Sandbox Code Playgroud)

不过它有点棘手,因为您必须将这些格式选项传递给 nl 才能使其不将制表符和内容放入编号格式。grep 也有一个行编号选项(-n),你可以像这样通过 grep 两次传递内容,首先匹配任何内容(双双引号),然后是行号:

grep -n "" inputfile | grep -C3 "^26:"
Run Code Online (Sandbox Code Playgroud)

只需确保在正则表达式中使用一些上下文来匹配行号,这样就不会匹配 126 或 260 等内容。