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

Mas*_*lah 4 sed awk

我有以下信息表:

ko:K00624  
ko:K20215   
1.5.3.5   
ko:K01106  
2.3.41.5
Run Code Online (Sandbox Code Playgroud)

我想要这样的输出:

ko:K00624    
ko:K20215   
-
ko:K01106  
-
Run Code Online (Sandbox Code Playgroud)

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

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

ste*_*ver 8

您的awk命令的可能更正版本:

awk '{if($1!~"ko") print "-"; else print }' filename
Run Code Online (Sandbox Code Playgroud)

虽然这样做可能更白话

awk '$0 !~ /^ko/ {$0 = "-"} {print}' filename
Run Code Online (Sandbox Code Playgroud)

或(更短的形式)

awk '!/^ko/ {$0 = "-"} 1' filename
Run Code Online (Sandbox Code Playgroud)

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

sed '/^ko/!c-' filename
Run Code Online (Sandbox Code Playgroud)


小智 5

sed -e '/^ko/!s/.*/-/' input_file.dat
Run Code Online (Sandbox Code Playgroud)

意思是,对于所有不以 "ko" 开头的行,只需将整行替换为破折号即可。对于其他所有内容,保持原样并打印不变。