例如,我们要统计所有的引号 ( "
) 字符;我们只是担心文件是否有比它应该更多的引号。
例如:
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”。