regex - 使用 REGEX 匹配单词的 BASH 脚本

标签 regex bash csv

我有一个 CSV 被读入一个包含以下短语的脚本:

This port supports SSLv3/TLSv1.0. 
This port supports TLSv1.0/TLSv1.1/TLSv1.2. 
This port supports TLSv1.2.

我要做的是在单词/数字上设置一个 REGEX 变量:TLSv1.0 然后在 IF/Then 语句中引用该变量。我的问题 正在让正则表达式查看 TLSv1.0。有人能帮帮我吗 制作我的 BASH 脚本以查看 TLSv1.0,当它沿着以“此端口支持”开头的行时?

#!/bin/sh
REGEX="\TLSv1.0\"

cat filename.csv | awk -F"," '{gsub(/\"/,"",$4);print $5}' | sed s/\"//g | 
while IFS=" " read pluginoutput
do

if [[ "$pluginoutput" =~ $REGEX ]]; then
.
. rest of my code
.

您可以看到我正在尝试在变量中设置正则表达式,但它不起作用。显然是错别字什么的。有人有正则表达式建议吗?

谢谢,

最佳答案

这里有很多错误。选择一些关键的:

  • #!/bin/sh 指定您希望使用符合 POSIX 的解释器来解释您的脚本,但未指定是哪一个。其中许多,如 ashdash,没有 [[ ]]=~,或者您的代码所依赖的其他扩展。请改用 #!/bin/bash
  • REGEX="\TLSv1.0\" 中,"数据,而不是语法。这意味着当您执行 [[ $string =~ $regex ]] 时,它们是正在搜索的内容的一部分。相比之下,regex=TLSv1.0 regex="TLSv1.0"regex='TLSv1.0' 都具有相同的效果,将 TLSv1.0 指定为正则表达式 变量。

    也就是说,作为正则表达式语法的一个要点,您可能需要 regex='TLSv1[.]0' - 这样它只会匹配 .,而不是将点视为匹配任意字符的通配符(因为它在正则表达式语法中)。

就个人而言,我可能会做更像下面的事情(如果我有理由在 bash 中进行解析而不是让单个 egrep 调用处理您的所有输入):

#!/bin/bash
regex='(^|,)"?This port supports .*TLSv1[.]0.*[.]"?($|,)'
while IFS= read -r line; do
  [[ $line =~ $regex ]] && echo "Found TLSv1.0 support"
done

关于regex - 使用 REGEX 匹配单词的 BASH 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42399207/

相关文章:

java - Selenium WebDriver 和正则表达式

linux - 如何使用 linux 限制一行中出现的字符串的长度

javascript - 如何从 CSV 文件中提取信息以用于堆叠条形图

regex - MongoDB 正则表达式查询 : Why doesn't this work?

c++ - C++ 中的 Regex 语句未按预期工作

bash - 让 "complete"和 "menu-complete"一起工作

Python csv.reader 自动转换 ISO 日期?

Delphi 7 将 XLS(X) 转换为 CSV

C# 正则表达式匹配特殊字符

java - 多个 Bash 终端处理单个 JVM 实例