밑줄 문자까지만 인쇄하려면 awk / sed


10

awk 또는 sed를 사용하여 첫 번째 밑줄 문자까지만 문자열을 인쇄하려면 어떻게해야합니까?

전에:

host100_044 2
host101_045 2
host102_046 2

후:

host100
host101
host102

답변:


20

이 작업은 cut다음 과 같이 수행 할 수 있습니다 .

cut -d _ -f 1

예 :

$ echo host100_044 2 | cut -d _ -f 1
host100

또한 함께 awk할 수 있습니다 awk -F_ '{print $1}'(아마도 더 깔끔한 방법이 있습니다)


@Renan 잘라 내기 수행 외에 출력에 모든 입력 정보가 ​​포함되도록하려면이 잘라 내기 기능을 어떻게 수정합니까?
BioMan

2

sed의 또 다른 대안 :

echo 'host100_044 2' | sed 's/^\(.*\)_.*$/\1/'

파일에 이러한 파일이 있으면 다음과 같이 호출 할 수 있습니다.

cat fileName | sed 's/^\(.*\)_.*$/\1/'

1
echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} {printf("host%s ", $1)}'  | cut -d ' ' -f2-

산출:

host100 host101 host102

줄 바꿈으로 :

echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} $1 ~ /[0-9]/ {print "host"$1}'

산출:

host100
host101
host102

1

사용 sed:

echo host100_044 2 | sed 's;_.*;;'


sed내부 편집 옵션을 사용하여

sed -i.old 's;_.*;;' infile

awk솔루션에 대해 이미 게시 되었지만 ( cut이 경우 가장 적합 할 수도 있음), 동일한 내용을 작성하고 있었지만 , 그는 물었 으므로 sed초를 이겼습니다 :-). 기본적으로 줄 끝 $과 일치 하므로을 제거 할 수도 있습니다 .*.
Daniel Andersson

@DanielAndersson : 그렇습니다.
프린스 존 웨슬리

1
$ echo "host100_044 2" | awk -F'_' '{print $1}'
host100

-F'_'에 지시는 awk필드 구분 기호로 밑줄을 사용합니다. awk스크립트 자체는 첫 번째 필드를 출력한다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.