我有以下信息表:
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
行-
。 (我本来会将其添加为评论,但我还没有代表。)