首页 > 解决方案 > 使用 sed 忽略行中的特定模式

问题描述

我正在尝试 grep 以group关键字开头的单词 & 以-wx给定行结尾的单词。我也需要忽略下面的话。

  1. 开始default:group和结束于-wx
  2. group::-wx

我的发现

echo "# file: /test/test123 # owner: own # group: acct user::r--  group::r-x mask::rwx other::r-x default:user::r-- default:user:an:--x default:group::r-x default:group:fin:-wx default:mask::rwx default:other::r-x" | grep -o "group:[^ ]*-wx" | sed '/group::-wx/d';'/default:[^ ]*:[^ ]*-wx/d'

实际结果

fin:-wx

预期结果

<null>

标签: unixsedgrep

解决方案


您已经有一个 grep 来选择您想要的内容,只需添加 grep 语句即可删除您不想要的内容。

像这样:

LINE="# file: /test/test123 # owner: own # group: acct user::r--  group::r-x mask::rwx other::r-x default:user::r-- default:user:an:--x default:group::r-x default:group:fin:-wx default:mask::rwx default:other::r-x"

echo $LINE | grep -o "group:[^ ]*-wx" \
           | grep -vo "default:group:[^ ]*-wx" \
           | grep -vo "group::-wx"

在我的 linux 上,它什么也不返回,这是您所期望的。我没有其他测试样本,但我认为这还可以。


推荐阅读