【发布时间】:2015-08-19 22:36:33
【问题描述】:
我有一个特定的单词,我想找出我的文件中出现该单词的行号。
这发生在一个 c shell 脚本中。
我一直在尝试使用 awk 来查找行号,但到目前为止我还没有找到。我也想将该行号分配给一个变量。
【问题讨论】:
-
不要写 c shell 脚本。谷歌
CSH why not.
我有一个特定的单词,我想找出我的文件中出现该单词的行号。
这发生在一个 c shell 脚本中。
我一直在尝试使用 awk 来查找行号,但到目前为止我还没有找到。我也想将该行号分配给一个变量。
【问题讨论】:
CSH why not.
要在文件中查找word 并打印行号,请使用-n 选项到grep:
grep -n 'word' file
这将打印行号和匹配的行。
这将打印文件中出现word这个词的行号:
awk '/word/{print NR}' file
这将打印行号和出现word 的行:
awk '/word/{print NR, $0}' file
您可以将word 替换为您喜欢的任何正则表达式。
它是如何工作的:
/word/
这将选择包含word 的行。
{print NR}
对于选定的行,这将打印行号(NR 表示记录编号)。您可以更改它以打印您感兴趣的任何信息。因此,{print NR, $0} 将打印行号,然后是行本身,$0。
使用命令替换:
n=$(awk '/word/{print NR}' file)
假设我们要查找的正则表达式在shell变量url中:
awk -v x="$url" '$0~x {print NR}' file
还有:
n=$(awk -v x="$url" '$0~x {print NR}' file)
【讨论】:
-v 选项将shell 变量url 分配给一个awk 变量,然后使用awk 变量进行正则表达式匹配。请参阅答案末尾的新部分。
word吗?
grep -nf file1 file2 将打印 file2 中与 file1 中的任何一行匹配的每一行(连同其行号)。 file1 中的行被视为正则表达式,如果您不希望这样,请使用 grep -nFf file1 file2 来查找文字(非正则表达式)匹配。
Sed
你可以使用 sed 命令
sed -n '/pattern/=' file
说明
-n 抑制正常输出,因此它不会打印实际行。它首先匹配/pattern/,然后= 运算符表示打印行号。请注意,这将打印包含该模式的所有行。
【讨论】:
sed -n "/$url/=" file.txt
$url 的值是多少?如果它包含任何特殊字符,如/ 斜杠,那么我们需要更改 sed 命令的分隔符。
$url 没有逗号。试试sed -n "\,$url,=" file.txt
【讨论】:
找到第一列匹配 RRBS 的行号
awk 'i++ {if($1~/RRBS/) print i}' ../../bak/bak.db
【讨论】: