(对LaTeX用户)我想搜索手动标记的项目
(可能关注的人) script file on GitHub
我试图找到解决方案,但我发现建议首先删除空格。就我而言,我认为应该有更简单的解决方案。它可以使用grep
或awk
或其他工具。
请考虑以下几行:
\item[a)] some text
\item [i) ] any text
\item[ i)] foo and faa
\item [ 1) ] foo again
我想找到(或统计)是否有一个)
个括号内的项目。格式可以在括号内和/或周围有空格。此外,结束括号前的字符可以是任何字母或数字。
修改:我尝试了grep "\[a)\]"
,但错过了[ a) ]
。
由于有很多可能的方法来编写项目,我无法决定可能的模式。我认为这对我来说已经足够了,比如
\item<blank spaces>[<blank spaces><letter or number>)<blank spaces>]
替换空格无法正常工作,因为上面的模式通常包含文本(例如:\item[ a)] consider the function...
)
输出应指示是否存在此类模式。它可以是零或出现次数。
答案 0 :(得分:2)
所以要在grep
本身做到这一切:
grep -c -E '\\item\s*\[\s*\w+\)\s*\]' file.txt
注意所有\s*
空格检查。同时-c
来计算。
打破它:
\\ a backslash (needs escape in grep)
item "item"
\s* optional whitespaces
\[ "[" (needs escape in -E)
\s* optional whitespaces
\w+ at least one 'word' char
\) ")" (needs escape in -E)
\s* optional whitespaces
\] "]" (needs escape in -E)
答案 1 :(得分:1)
所以我在想这样的事情:
tr -d " \t" < file.txt | grep -c '\\item\[[0-9A-Za-z])\]'
这会计算你的匹配数量。
编辑:为tr调用添加了\t
。现在删除所有空格和标签。
这是一个仅限grep的版本。这对于打印出所有匹配(通过删除-c)也很有用,因为上面的版本修改了输入:
grep -c '\\item *\[ *[0-9A-Za-z]) *\]' file.txt
如果您正在寻找,这是一个更通用的答案。在这里,我们将匹配输出到文件并计算文件中的行以获得匹配数...
grep '\\item *\[ *[0-9A-Za-z]) *\]' file.txt > matches.txt
wc -l < matches.txt
答案 2 :(得分:1)
关注awk
也可能有所帮助(我只是删除[
到]
之间的空格,然后在其中查找数字或字符的模式。
awk '
match($0,/\[.*\]/){
val=substr($0,RSTART+1,RLENGTH-1);
gsub(/[[:space:]]+/,"",val);
if(val ~ /[a-z0-9]+\)/){ count++ }
}
END{
print count
}' Input_file