패턴을 찾을 수 없으면 특수문자나 공백을 입력하세요.

패턴을 찾을 수 없으면 특수문자나 공백을 입력하세요.

다음 정보 테이블이 있습니다.

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대답은 다음과 같습니다. FWIW

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

로 시작하지 않는 모든 ko줄을 바꾸면 됩니다 -. (댓글로 추가하고 싶었는데 아직 담당자가 없습니다.)

관련 정보