BASH - Sed无法删除填充元字符的属性行

时间:2013-01-24 03:26:46

标签: linux perl bash scripting sed

我试图从名为changesfile的文件中正确地将参数传递给sed但我没有成功。它可能是文件更改文件的内容或我使用for循环的方式。我不确定。

我使用的命令:

cat changesfile | while read i ; do sed -e "s/$i//g" "filename" ; done
cat changesfile | while read i ; do sed -i "s/$i//g" "filename" ; done
cat changesfile | while read i ; do sed -e '/$i/d' filename ; done
cat changesfile | while read i ; do sed -e '/"$i"/d' filename ; done

我需要匹配文件中的某些行与大量的元字符。我试图匹配和删除的东西如下:

fileattribute[hostname.stile.tib.area2]=Disk /var;default_queue;area-unix
fileattribute[hostname.stoop.trb.area]=Disk /tmp;default_queue;area-unix

以下是包含通配符和转义字符的changesfile内容,以便将信息正确传递给sed,如下所示:

.*hostname\.stoop\.trb\.area.*Disk.*\/tmp.*area\-unix$
.*hostname\.stile\.tib\.area2.*Disk.*\/var.*area\-unix$

到目前为止,没有任何工作。有些命令会删除正则表达式以及其他内容。不知道为什么。任何建议都非常感谢。我工作场所的任何人都没有帮助。

1 个答案:

答案 0 :(得分:0)

尝试以下

#!/bin/bash
sed -i -r -f changesfile filename

<强>解释

  1. -r - 在脚本中使用扩展正则表达式。无需逃避特殊字符。
  2. -f - 将script-file的内容添加到要执行的命令中。