Sed 删除以#开头的行,而不是以#开头的行/bin/ksh

Sed 删除以#开头的行,而不是以#开头的行/bin/ksh,sed,Sed,如何删除以#开头但不以#开头的行/bin/ksh 使用sed-e'/^#/d'sed.sh将删除包括#在内的每一行/bin/ksh Thanks @Daniel H sed -e '/#!\/bin\/ksh/p' -e '/^#/d' sed.sh 这是给出我想要的结果的命令: 这是给出我想要的结果的命令:如下所示: sed '/^#/{/^#!\/bin\/ksh/d}' sed.sh 对于所有以#开头的行,如果它们不是以开头/bin/ksh,删除它们 因为注释(和shebang行

如何删除以
#
开头但不以
#开头的行/bin/ksh

使用
sed-e'/^#/d'sed.sh
将删除包括
#在内的每一行/bin/ksh

 Thanks @Daniel H
 sed -e '/#!\/bin\/ksh/p' -e '/^#/d' sed.sh 
这是给出我想要的结果的命令:

这是给出我想要的结果的命令:

如下所示:

sed '/^#/{/^#!\/bin\/ksh/d}' sed.sh
对于所有以
#
开头的行,如果它们不是以
开头/bin/ksh
,删除它们

因为注释(和shebang行)前面可能有空格,所以更精确的是

sed '/^[[:space:]]*#/{/^[[:space:]]*#![[:space:]]*\/bin\/ksh/d}' sed.sh
像这样:

sed '/^#/{/^#!\/bin\/ksh/d}' sed.sh
对于所有以
#
开头的行,如果它们不是以
开头/bin/ksh
,删除它们

因为注释(和shebang行)前面可能有空格,所以更精确的是

sed '/^[[:space:]]*#/{/^[[:space:]]*#![[:space:]]*\/bin\/ksh/d}' sed.sh

假设您不想删除
#/bin/ksh
仅从文件的第一行开始,您可以添加寻址
sed-e'2,${/^#/d}
我认为添加表达式
1p
来打印第一行是可行的。这将使整个事情
sed-e'1p'/^#/d'
。如果您确实想保留所有
#的行/bin/ksh
,而不仅仅是第一个,然后您需要将
1p
中的
1
替换为
/#\/bin\/ksh/
@Sundeep谢谢。万一/bin/ksh不在第一行?那么我想你可以做
/^#\/bin\/ksh/!{/^#/d}
。这就是所有不匹配的行上的
/^d
部分\/bin\/ksh/。请注意
#/bin/ksh
也是一个有效的shebang(感叹号后面有空格)。假设您不想删除
#/bin/ksh
仅从文件的第一行开始,您可以添加寻址
sed-e'2,${/^#/d}
我认为添加表达式
1p
来打印第一行是可行的。这将使整个事情
sed-e'1p'/^#/d'
。如果您确实想保留所有
#的行/bin/ksh
,而不仅仅是第一个,然后您需要将
1p
中的
1
替换为
/#\/bin\/ksh/
@Sundeep谢谢。万一/bin/ksh不在第一行?那么我想你可以做
/^#\/bin\/ksh/!{/^#/d}
。这就是所有不匹配的行上的
/^d
部分\/bin\/ksh/。请注意
#/bin/ksh
也是一个有效的shebang(感叹号后面有空格)。