grep:无效的上下文长度参数

Ric*_*son 2 grep

我要检查,如果一个iptables规则存在(如看到这里),但我得到了以下错误:

$ sudo iptables-save | grep "-A OUTPUT -p tcp --tcp-flags  RST RST -j DROP"
grep:  OUTPUT -p tcp --tcp-flags  RST RST -j DROP: invalid context length argument
Run Code Online (Sandbox Code Playgroud)

也许我必须逃脱一些角色?

Tod*_*obs 6

问题

grep“ -A OUTPUT -p tcp --tcp-flags RST RST -j DROP”

使用许多Shell工具,某些参数可能会错误地解释为标志。根据您的grep版本,以下内容将帮助grep理解“标志”并不是真正的标志,而是您要搜索的表达式的一部分。

例如,考虑:

$ echo "-Afoo" | grep  "-Afoo"
grep: Invalid argument
Run Code Online (Sandbox Code Playgroud)

解决方案

标定表达式的标志

  1. 使用特殊--标志指示没有标志跟随。

    grep -- "-A OUTPUT -p tcp --tcp-flags  RST RST -j DROP"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用该-e标志可显式标识引号后面的文本,以作为要搜索的表达式。

    grep -e "-A OUTPUT -p tcp --tcp-flags  RST RST -j DROP"
    
    Run Code Online (Sandbox Code Playgroud)

解决方案示例

这对我来说对BSD grep都有效。考虑以下示例:

$ echo "-Afoo" | grep -- "-Afoo"
-Afoo

$ echo "-Afoo" | grep -e "-Afoo"
-Afoo
Run Code Online (Sandbox Code Playgroud)

尽管示例确实是人为设计的,但它们可以更清楚地说明问题(和解决方案),即使在没有iptables用作输入文本的系统上,也可以轻松对其进行测试。