パターンが見つからない場合は特殊文字または空白を入力してください

パターンが見つからない場合は特殊文字または空白を入力してください

次の情報表があります:

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

別の GNU のsed代替手段 (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答えです。

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

koで始まっていないすべての行を-. に置き換えるだけです (コメントとして追加したいのですが、まだ担当者がいません)。

関連情報