我是bash的新手,所以我在做一些非常基本的事情时遇到了麻烦。 通过使用各种脚本,我发现以下脚本打印包含"字"
的行for file in*; do
cat $file | grep "word"
done
执行以下操作:
for file in*; do
cat $file | grep "word" | wc -l
done
在每次迭代中都有打印的结果" word"出现在档案中。
echo
柜台?我使用了一个计数器,但它显示为0。
let x+=cat $filename | grep "word"
答案 0 :(得分:5)
您可以将整个循环传递给wc -l
。
for file in *; do
cat $file | grep "word"
done | wc -l
这是useless use of cat。怎么样:
for file in *; do
grep "word" "$file"
done | wc -l
实际上,如果您同时将所有文件名传递给grep
,则不需要整个循环。
grep "word" * | wc -l
请注意,如果word
在同一行显示多次,则这些解决方案只计算整行一次。如果您想单独计算相同行数,可以使用-o
在单独的行上打印每个匹配项:
grep -o "word" * | wc -l
答案 1 :(得分:2)
约翰回答中的问题是要走的路。只是为了满足你的好奇心:
extension NSDictionary {
func toJSonString() -> String {
let dict = self
var jsonString = "";
do {
let jsonData = try JSONSerialization.data(withJSONObject: dict, options: .prettyPrinted)
jsonString = NSString(data: jsonData, encoding: String.Encoding.utf8.rawValue)! as String
} catch {
print(error.localizedDescription)
}
return jsonString;
}
}
如果包含sum=0
for f in *; do
x="$(grep 'word' "$f" | wc -l)"
echo "x: $x"
(( sum += x ))
done
echo "sum: $sum"
和grep
的行不会产生数字,那么您就是SOL。这就是为什么你应该坚持使用其他解决方案,或者对wc
,' read
和case
'等事情进行纯粹的bash实现。或*word*)