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