击;检查某些行是否包含字符

时间:2018-04-26 17:16:31

标签: bash

if grep -q "_" "${changefile}"; then
  fail
  printf "\nUnderscores are invalid in hostnames\n" >&2
  exit 1
fi

如果DNS配置文件包含下划线,我会将此代码段作为检查DNS配置文件的方法。无效的角色。如果是这样,它会崩溃。

我需要重写它,以便检查是否有任何主机名包含无效字符。主机名位于第27-350行。

我的想法的逻辑围绕着:"如果grep -q" $ {changefile}"第27到350行返回任何无效字符;抱怨并退出" 。只是不确定如何编码。

引用微软的网站,主机名必须满足仅限字符的事实:

  

的范围是' A-Z',' a-z',' 0-9','。'和' - '使用。

2 个答案:

答案 0 :(得分:0)

$ awk '27<=NR && NR<=350 && !/A-Za-z0-9.-/{f=1; 
                                           print "invalid chars at line:" NR,$0; exit} 
                                       END{exit f}' file

这将在第一次失败后退出,或者您可以验证所有行并报告所有行失败(为此删除第一个块中的exit

答案 1 :(得分:0)

你没有给出足够的线条。

你可以试试这个sed

sed '
27,350!bA
/_/!d
s/.*/& --> invalid line : contain _/
q
:A
$s/.*/no problem/p
d' infile