我的数据如下:
<id_mytextadded1829>
<text1> <text2> <text3>.
<id_m_abcdef829>
<text4> <text5> <text6>.
<id_mytextadded1829>
<text7> <text2> <text8>.
<id_mytextadded1829>
<text2> <text1> <text9>.
<id_m_abcdef829>
<text11> <text12> <text2>.
现在我想要<text2>
所在的行数。我知道我可以使用python的正则表达式做同样的事情。但是正则表达式会告诉我一个模式是否存在于某一行中?另一方面,我的要求是找到一个恰好位于一行中间的字符串。我知道sed很适合替换一行中的内容。但是,如果我只想要行数,则可以使用sed来替换。
编辑:
对不起,我忘了提。我想要在行的中间出现<text2>
的行。我不想要在行的开头或结尾出现<text2>
的行。
例如。在上面显示的数据中,中间有<text2>
的行数是2(而不是4)。
我是否有某种方法可以达到所需的行数,通过这些行可以找到使用linux或python中间<text2>
的行数
答案 0 :(得分:3)
我想要在行的中间出现
<text2>
的行。
你可以说:
grep -P '.+<text2>.+' filename
列出包含<text2>
的行不在行的开头或结尾。
为了只得到比赛次数,你可以说:
grep -cP '.+<text2>.+' filename
答案 1 :(得分:1)
您可以使用grep
。例如,这将计算文件中与^123[a-z]+$
模式匹配的行数:
egrep -c ^123[a-z]+$ file.txt
P.S。我不太确定语法,我现在没有可能测试它。也许应引用正则表达式。
编辑:这个问题有点棘手,因为我们不确定你的数据是什么 以及你究竟想要在其中计算什么,但是这一切都归结为正确制定正则表达式。
如果我们假设<text2>
是一个确切的字符序列,应该出现在行的中间,并且不应该出现在开头和结尾,那么这应该是你的正则表达式寻找:^<text[^2]>.*text2.*<text[^2]>\.$
答案 2 :(得分:0)
我想要在行的中间出现的行。我不 想要在开头或结尾出现的行 线。
尝试将grep
与-c
grep -c '>.*<text2>.*<' file
输出:
2
答案 3 :(得分:0)
使用awk
即可:
awk '$2~/text2/ {a++} END {print a}' file
2
它将计算行中间text2
的所有行。
答案 4 :(得分:0)
哪里发生(无处不在)
sed -n "/<text2>/ =" filename
如果你想在中间(比如稍后在评论中写)
sed -n "/[^ ] \{1,\}<text2> \{1,\}[^ ]/ =" filename