使用 grep 打印行号

使用 grep 打印行号

我想使用 grep 命令打印我要搜索的字符串的行号。但是,当我使用该命令时,grep -n它会打印行号,并在其旁边加上冒号 :。我是否可以使用相同的grep -n命令打印行号,并在其后面加上 : 冒号?

$ grep -n 'Captain' sometextfile.txt
3: Captain America

我希望它打印,

3 Captain America

(不带 ':' )

有什么建议么??

答案1

您可以使用sedgrep实现这一点。

grep -n 'Captain' sometextfile.txt | sed 's/:/ /'

此 sed 命令找到模式:并将其替换为(空格)。

常规语法 -sed 's/find/replace/'

:此方法将仅将每行中第一次出现的 替换为。因此,即使文本文件中的某一行包含:,也不会受到影响。

答案2

如果你只想删除冒号(而不是用空格替换它),你可以通过管道传输 grep 语句的输出tr。你的命令将是这样的:

grep -n 'Captain' sometextfile.txt | tr -d ':'

如果要用空格替换冒号,可以使用:

grep -n 'Captain' sometextfile.txt | tr ':' ' '

不过,正如 muru 指出的那样,这将删除行中的所有冒号。

答案3

您可以尝试一下这个命令是否对您有帮助

awk '/Captain America/ {printf "%s %s\n", NR, $0}'

答案4

以下是我对这个问题的看法,使用 awk sub 函数:

grep -n 'Captain' file.txt | awk '{sub(":"," "); print }'

grep -n 'Captain' file | awk '{sub(":Captain"," Captain"); print }'

下面是剪切(删除了:dazzle 示例中的所有类似痕迹):

grep -n 'Captain' file | cut -d":" -f1- --output-delimiter=" "

相关内容