regex - 如何使用 vars 在 awk 中排除多个非字母数字字符

标签 regex awk

我定义了一系列我不想打印的字符。

在此示例中,字符 % 被正确排除:

awk 'BEGIN { FS=";";ch1 = "%";ch2 = "-"}
{
if(NR > 1)
{
    if($1 !~ ch1)
    {
            print $1
    }
} 
}
END {}' $1

但是当我添加第二个变量 ch2 时,它不会应用任何过滤器:

参见下面的示例:

awk 'BEGIN { FS=";";ch1 = "%";ch2 = "-"}
{
if(NR > 1)
{
    if($1 !~ ch1|| $1 !~ ch2 )
    {
            print $1
    }
} 
}
END {}' $1

如果第一列中包含 ch1 或 ch2,我希望排除该记录。

我怎样才能做到这一点? 谢谢

最佳答案

您应该使用 && 而不是 ||,因为您希望 $1 不包含这两个字符:

if($1 !~ ch1 && $1 !~ ch2 )

或者,您可以使用括号表达式:

if ($1 !~ /[%-]/)

关于regex - 如何使用 vars 在 awk 中排除多个非字母数字字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52702392/

相关文章:

bash - 当另一个变量中已知关联的子字符串时,确定一个变量中的子字符串

javascript - 如何在 JavaScript 中替换模板文本文档中的几个不同项目

c++ - 根据 CPlusPlus.com 使用 std::regex_iterator<std::string::iterator>

java - 在 Java 中使用正则表达式匹配空格或空字符串

linux - 如何避免在linux命令输出中显示2第一行?

linux - awk 到变量的输出为空白,但打印不是

用 Prolog 编写的 RegEx 解析器

mysql - 通过SQL查询操作前面的数据

linux:如何对文本输入执行类似于 awk 的统计?

r - 在Windows机器上使用fread中的unix命令预处理文件