如果未找到模式,则输入特殊字符或空白

如果未找到模式,则输入特殊字符或空白

我有以下信息表:

ko:K00624  
ko:K20215   
1.5.3.5   
ko:K01106  
2.3.41.5

我想要这样的输出:

ko:K00624    
ko:K20215   
-
ko:K01106  
-

我使用了以下命令,但它不起作用。请推荐我

cat filename | awk '{if($1!~"ko"); print "-") print }' | less

答案1

命令的可能更正版本awk

awk '{if($1!~"ko") print "-"; else print }' filename

虽然这样做可能更白话

awk '$0 !~ /^ko/ {$0 = "-"} {print}' filename

或(缩写形式)

awk '!/^ko/ {$0 = "-"} 1' filename

另一种 GNUsed替代方案(使用c命令而不是s命令):

sed '/^ko/!c-' filename

答案2

sed -e '/^ko/!s/.*/-/' input_file.dat

意思是,对于所有不以“ko”开头的行,只需继续并用破折号替换整个行即可。对于其他所有内容,请保持原样并按原样打印。

答案3

或者....

    ~]$ echo -e  "ko:K00624\nko:K20215\n 1.5.3.5\nko:K01106\n2.3.41.5" \
        | while read line ; do if [[ $line =~ ko ]] ; then echo $line ; else echo "-" ; fi ; done
    ko:K00624
    ko:K20215
    -
    ko:K01106
    -

答案4

这是我的sed答案,FWIW

sed s/^[^ko].*/-/g filename

您只需替换不以 开头的每一ko-。 (我本来会将其添加为评论,但我还没有代表。)

相关内容