我有一个 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 的解释器来解释您的脚本,但未指定是哪一个。其中许多,如ash
或dash
,没有[[ ]]
、=~
,或者您的代码所依赖的其他扩展。请改用#!/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/