unix结合grep w和v命令

时间:2018-02-18 17:20:57

标签: unix grep

我想搜索文件并包含文字#!/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

之外的所有行

2 个答案:

答案 0 :(得分:0)

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

说明:

  • ^[^#]表示以与#
  • 不同的内容开头
  • \|是a或
  • ^#\!/bin/bash$是确切的行#!/bin/bash

答案 1 :(得分:0)

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

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

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

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

另一种可能性是使用awk。这使您可以应用无法在正则表达式中表达的逻辑。例如,如果您只想在文件的第一行显示注释行并保留注释行,并删除所有其他注释,则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