如果未找到模式,則輸入特殊字元或空白

如果未找到模式,則輸入特殊字元或空白

我有以下資訊表:

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-。 (我本來會將其添加為評論,但我還沒有代表。)

相關內容