Bash에서 Cut을 사용하여 문자열의 특정 부분을 잘라냅니다.

Bash에서 Cut을 사용하여 문자열의 특정 부분을 잘라냅니다.

Linux 시스템에 다음 문자열이 포함된 텍스트 파일이 있습니다.

appset.org 87.76.29.21 ns1.appset.org ns2.appset.org
bbchannel.eu 87.77.29.25 ns1.appset.org ns2.appset.org
cyberset.it 87.76.29.22 ns1.appset.org ns2.appset.org
cybersetsystems.com 87.76.29.21 ns1.appset.org ns2.appset.org
romelidays.com 87.98.29.21 ns1.appset.org ns2.appset.org
novaprospect.eu 87.76.29.21 ns1.appset.org ns2.appset.org

내가 원하는 것은 IP 주소로 시작하는 부분을 제거하고 웹사이트 이름만 출력하는 것입니다(예: appset.org) bbchannel.eu.

내가 시도한 코드는 다음과 같습니다

 #!/bin/bash
  while read p; do
      echo "$p" | cut -c 1-13
   done <experiment

하지만 뭔가 잘못된 것 같습니다. 해당 명령을 사용해 보았지만 sed논리가 여전히 작동하지 않습니다. 저는 bash를 처음 접했습니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변1

작업에 적합한 도구가 있지만 cut이로 인해 필요한 것보다 훨씬 더 복잡해집니다. 여기서 bash 루프를 사용할 이유가 전혀 없습니다. 단지 작업이 더 느리고 복잡해질 뿐입니다. cut파일의 각 줄은 자체적으로 처리됩니다. 그러나 기본 구분 기호 cut는 공백이 아닌 탭이므로 공백을 자르려면 해당 플래그를 사용하도록 지시해야 합니다 -d. 그런 다음 특정 문자를 자르라고 지시하는 대신 첫 번째 문자를 인쇄하라고 지시합니다.대지그리고 -f 1:

$ cut -d' ' -f 1 file 
appset.org
bbchannel.eu
cyberset.it
cybersetsystems.com
romelidays.com
novaprospect.eu

: 를 사용하면 sed첫 번째 공백 이후의 모든 내용을 제거하려고 합니다.

$ sed 's/ .*//' file 
appset.org
bbchannel.eu
cyberset.it
cybersetsystems.com
romelidays.com
novaprospect.eu

awk또는 기본적으로 공백으로 분할하는 필드를 사용할 수 있습니다 .

$ awk '{print $1}' file 
appset.org
bbchannel.eu
cyberset.it
cybersetsystems.com
romelidays.com
novaprospect.eu

또는 펄:

$ perl -pe 's/\s.*//' file 
appset.org
bbchannel.eu
cyberset.it
cybersetsystems.com
romelidays.com
novaprospect.eu

아니면 Perl을 다시 사용하세요:

$ perl -lane 'print $F[0]' file 
appset.org
bbchannel.eu
cyberset.it
cybersetsystems.com
romelidays.com
novaprospect.eu

셸에서도 이 작업을 수행할 수 있지만 큰 파일의 경우 속도가 훨씬 느려집니다.일반적으로 좋은 생각은 아닙니다.:

$ while read want rest; do echo "$want"; done < file
appset.org
bbchannel.eu
cyberset.it
cybersetsystems.com
romelidays.com
novaprospect.eu

또는 임의 입력에 대해 더 안전합니다.

$ while read -r want rest; do printf '%s\n' "$want"; done < file
appset.org
bbchannel.eu
cyberset.it
cybersetsystems.com
romelidays.com
novaprospect.eu

관련 정보