例如,我们要统计所有的引号 ( ") 字符;我们只是担心文件是否有比它应该更多的引号。
例如:
cluster-env,"manage_dirs_on_root","true"
cluster-env,"one_dir_per_partition","false"
cluster-env,"override_uid","true"
cluster-env,"recovery_enabled","false"
Run Code Online (Sandbox Code Playgroud)
预期成绩:
16
Ulr*_*arz 46
您可以将tr(翻译或删除字符)与wc(计算单词、行、字符)结合起来:
tr -cd '"' < yourfile.cfg | wc -c
Run Code Online (Sandbox Code Playgroud)
(-d删除 的c补全中的所有字符",然后计算字符数c。)
Rom*_*est 33
grep方法:
grep -o '"' file | wc -l
16
Run Code Online (Sandbox Code Playgroud)
-o - 只输出匹配的子串或者用单目瞪口呆:
awk -v RS='' -v FPAT='"' '{print NF}' file
16
Run Code Online (Sandbox Code Playgroud)
RS='' - 空记录分隔符(而不是换行符)
FPAT='"' - 定义字段值的模式
如果文件中的两行有奇数个双引号,则双引号的总和将为偶数,并且您将不会检测到不平衡的引号(这是我认为您实际上想要做的,但我可能是错的)。
此awk脚本报告输入行中具有奇数个引号的任何行:
awk -F'"' 'NF % 2 == 0 { printf("Line %d has odd quoting: %s\n", NR, $0) }'
Run Code Online (Sandbox Code Playgroud)
我们将字段分隔符 ( FS) 设置为"with -F'"',这意味着如果一行有偶数个字段,则它有奇数引号。NF是最近记录中的字段数,并且NR是当前记录的序号(“行号”)。
给定以下输入:
$ cat file
cluster-env,"manage_dirs_on_root","true"
cluster-env,"one_dir_per_partition","false"
cluster-env,override_uid","true"
cluster-env,recovery_enabled","false"
Run Code Online (Sandbox Code Playgroud)
我们得到
$ awk -F'"' 'NF % 2 == 0 { printf("Line %d has odd quoting: %s\n", NR, $0) }' file
Line 3 has odd quoting: cluster-env,override_uid","true"
Line 4 has odd quoting: cluster-env,recovery_enabled","false"
Run Code Online (Sandbox Code Playgroud)
就像是
$ grep -o '"' | wc -l
Run Code Online (Sandbox Code Playgroud)
将为该文件返回“14”。