我怎样才能将这个 egrep 脚本更改为 zgrep 脚本并且仍然可以正常工作?
How could I change this egrep script to a zgrep script and still have it work?
我正在尝试查找以下任一格式的 phone 号码:+1.570.555.1212、570.555.1212、(570)555-1212 和 570-555-1212。我们还需要使用 zgrep 查看压缩文件夹,但是我会让我的代码返回“未找到匹配项”。该代码的工作原理如下所示,可从 txt 文件中查找 phone 数字。非常糟糕,但在下面
代码:
#!/bin/bash
egrep '[0-9]{3}-[0-9]{3}-[0-9]{4}|[0-9]{3}.[0-9]{3}.[0-9]{4}|([0-9]{3})[0-9]{3}-[0-9]{4}|+(1).[0-9]{3}.[0-9]{3}.[0-9]{4}' *
if [ $? -eq 0 ] ; then echo ; else echo "No matches found" ; fi 2>/dev/null
没有任何选项的 zgrep
在其正则表达式功能方面等同于 grep
;如果你想在搜索压缩文件时使用 grep -E
(又名 egrep
)正则表达式语法,你需要说 zgrep -E
。
#!/bin/bash
if zgrep -E -q '[0-9]{3}-[0-9]{3}-[0-9]{4}|[0-9]{3}.[0-9]{3}.[0-9]{4}|([0-9]{3})[0-9]{3}-[0-9]{4}|+(1).[0-9]{3}.[0-9]{3}.[0-9]{4}' *
then
echo ""
else
echo "No matches found" >&2
fi
还请注意 and When to wrap quotes around a shell variable 以及 -q
优先于重定向到 /dev/null
,以及在标准错误(>&2
重定向)时显示错误消息。
您的正则表达式也可以使用一些重构;也许试试
(\+\(1\).)?[0-9]{3}.[0-9]{3}.[0-9]{4}
注意圆括号和加号如何需要反斜杠转义才能按字面意思匹配,以及在将 +(1)
前缀重构为可选后,正则表达式的其余部分如何包含您枚举的所有其他变体,因为 .
匹配 -
和 (
以及 .
和许多其他字符。 (可选前缀也可以完全删除,这仍然会匹配相同的字符串,但我不得不猜测一些事情,所以我把它留在这句话中。)
我正在尝试查找以下任一格式的 phone 号码:+1.570.555.1212、570.555.1212、(570)555-1212 和 570-555-1212。我们还需要使用 zgrep 查看压缩文件夹,但是我会让我的代码返回“未找到匹配项”。该代码的工作原理如下所示,可从 txt 文件中查找 phone 数字。非常糟糕,但在下面
代码:
#!/bin/bash
egrep '[0-9]{3}-[0-9]{3}-[0-9]{4}|[0-9]{3}.[0-9]{3}.[0-9]{4}|([0-9]{3})[0-9]{3}-[0-9]{4}|+(1).[0-9]{3}.[0-9]{3}.[0-9]{4}' *
if [ $? -eq 0 ] ; then echo ; else echo "No matches found" ; fi 2>/dev/null
zgrep
在其正则表达式功能方面等同于 grep
;如果你想在搜索压缩文件时使用 grep -E
(又名 egrep
)正则表达式语法,你需要说 zgrep -E
。
#!/bin/bash
if zgrep -E -q '[0-9]{3}-[0-9]{3}-[0-9]{4}|[0-9]{3}.[0-9]{3}.[0-9]{4}|([0-9]{3})[0-9]{3}-[0-9]{4}|+(1).[0-9]{3}.[0-9]{3}.[0-9]{4}' *
then
echo ""
else
echo "No matches found" >&2
fi
还请注意 -q
优先于重定向到 /dev/null
,以及在标准错误(>&2
重定向)时显示错误消息。
您的正则表达式也可以使用一些重构;也许试试
(\+\(1\).)?[0-9]{3}.[0-9]{3}.[0-9]{4}
注意圆括号和加号如何需要反斜杠转义才能按字面意思匹配,以及在将 +(1)
前缀重构为可选后,正则表达式的其余部分如何包含您枚举的所有其他变体,因为 .
匹配 -
和 (
以及 .
和许多其他字符。 (可选前缀也可以完全删除,这仍然会匹配相同的字符串,但我不得不猜测一些事情,所以我把它留在这句话中。)