我想使用 grep 命令打印我要搜索的字符串的行号。但是,当我使用该命令时,grep -n
它会打印行号,并在其旁边加上冒号 :。我是否可以使用相同的grep -n
命令打印行号,并在其后面加上 : 冒号?
$ grep -n 'Captain' sometextfile.txt
3: Captain America
我希望它打印,
3 Captain America
(不带 ':' )
有什么建议么??
答案1
您可以使用sed
来grep
实现这一点。
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=" "