![计算具有不同字符的行数](https://linux22.com/image/114335/%E8%AE%A1%E7%AE%97%E5%85%B7%E6%9C%89%E4%B8%8D%E5%90%8C%E5%AD%97%E7%AC%A6%E7%9A%84%E8%A1%8C%E6%95%B0.png)
我正在尝试编写一个命令来检查名称已作为参数给出的文件,并打印出恰好包含 7 个字符的不同行数。我正在使用grep
和来做这件事find
,但我错了。我应该使用什么,或者什么模式?
答案1
这可能是你的命令。这是一个在命令行上获取文件名并输出其中包含七个字符的所有行的脚本:
#!/bin/sh
grep -c '^.......$' "$1"
您必须使上述脚本可执行(使用类似的命令chmod +x script.sh
),然后使用您要检查的文件名./script.sh file
来运行它。file
命令
grep -c '^.......$'
将输出给定文件中恰好包含七个字符(包括空格)的行数。
这可以缩短为
grep -cEx '.{7}'
是-E
必要的,因为表达式现在是扩展正则表达式。该-x
标志将强制表达式匹配整行。
如果您不想计算空格并且只对“单词字符”(字母数字)感兴趣,则可以使用
grep -cExw '.{7}'
标志-w
togrep
将强制匹配为“单词”(由非字母数字字符分隔的字母数字字符字符串)。
如果你想数一下有多少个独特的有满足此条件的行(这就是我解释“不同行”的方式),然后将grep
不带-c
标志的结果通过uniq
和进行管道传输wc -l
。这将计算恰好包含七个单词字符的唯一行的数量。
grep -Exw '.{7}' | uniq | wc -l
在脚本中,这变成了
grep -Exw '.{7}' "$1" | uniq | wc -l
答案2
perl -l -0777pe '$_ =()= /^.{7}$/gm' "$1"
awk 'length == 7' "$1" | wc -l
sed -Ee '/.{8}/d; /.{7}/!d' "$1" | grep -c .