unix结合grep w和v命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unix结合grep w和v命令相关的知识,希望对你有一定的参考价值。

我想搜索文件并包含文本#!/bin/bash,但排除任何其他具有#符号的行。这两个命令:grep -w '#!/bin/bash' filegrep -v '^#' file各自完成这项工作的一部分。我希望这是一个单一的命令,所以这就是我尝试过的。

grep -w '#!/bin/bash' | grep -v '^#' file

这不包括以#开头的行,但不包括行#!/bin/bash

grep -w '#!/bin/bash' -v '^#' file

这只是打印每一行,但#!/bin/bash

答案
grep "^[^#]|^#!/bin/bash$" test.sh

说明:

  • ^[^#]意味着从与#不同的东西开始
  • |是一个或
  • ^#!/bin/bash$是确切的线#!/bin/bash
另一答案

所以..看起来好像你试图从bash文件中删除评论而不删除他们的shebang。

grep命令可以搜索正则表达式,但不太适用于应用逻辑规则。你可以这样做:

 grep -v '^#[^!]' input.sh

但你不能删除贴在行尾的注释。请注意,我对这个正则表达式更加自由,因为完全有可能脚本可能会使用除了/bin/bash以外的其他东西。 :-)

另一种可能性是使用awk。这使您可以应用无法在正则表达式中表达的逻辑。例如,如果您只想保留注释行,如果它是文件第一行的shebang,并删除所有其他注释,awk可以表示如下:

awk '
  NF==1 && /^#!/;      # if we're on the first line and find shebang, print.
  /^#/ { next }        # if this is a comment line, skip it.
  1                    # print everything else.
' input.sh

以上是关于unix结合grep w和v命令的主要内容,如果未能解决你的问题,请参考以下文章

grep 命令系列:如何在 UNIX 中根据文件内容查找文件

linux-- grep命令

grep简析

grep命令

Linux grep/egrep命令详解

shell grep 基本使用