我想搜索文件并包含文字#!/bin/bash
,但排除任何其他带有#符号的行。这两个命令:grep -w '#!/bin/bash' file
和grep -v '^#' file
各自执行此任务的一部分。我希望这是一个单一的命令,所以这就是我尝试过的。
grep -w '#!/bin/bash' | grep -v '^#' file
这不包括以#开头的行,但不包括行#!/bin/bash
grep -w '#!/bin/bash' -v '^#' file
这只会打印除#!/bin/bash
答案 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