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

时间:2015-09-21 14:46:23

标签: grep

我想检查是否存在iptables规则(如here所示),但是我收到以下错误:

$ 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

也许我不得不逃避一些角色?

1 个答案:

答案 0 :(得分:6)

问题

  

grep" -A OUTPUT -p tcp --tcp-flags RST RST -j DROP"

使用许多shell工具,一些参数可能被错误地解释为标志。根据您的grep版本,以下内容将帮助grep了解"标记"不是真正的标志,但它们是你正在寻找的表达方式的一部分。

例如,考虑:

$ echo "-Afoo" | grep  "-Afoo"
grep: Invalid argument

解决方案

划分表达式的标志

  1. 使用特殊--标志表示后面没有标记。

    grep -- "-A OUTPUT -p tcp --tcp-flags  RST RST -j DROP"
    
  2. 使用-e标志明确标识随后作为要搜索的表达式的引用文本。

    grep -e "-A OUTPUT -p tcp --tcp-flags  RST RST -j DROP"
    
  3. 解决方案的例子

    这适用于我使用BSD grep的方式。请考虑以下示例:

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

    虽然这些例子很受欢迎,但它们更清楚地说明了问题(和解决方案),甚至可以在没有iptables用作输入文本的系统上轻松测试。