문자 집합을 제외하고 파일의 모든 문자를 개행 문자로 바꿉니다.

문자 집합을 제외하고 파일의 모든 문자를 개행 문자로 바꿉니다.

숫자와 "."를 제외한 파일의 모든 문자를 제거하는 방법, 각 단어(숫자/점)는 파일의 새 줄에 있어야 합니다. 예 2를 참조하세요.

  • 해결책은 sed, awk 또는 ksh 구문을 사용하는 것입니다.

참고 - 솔루션은 예 2를 기반으로 해야 합니다.

실시예 1

편집 전 파일

  192.0.22.1++0.1
  e32)5.500.5.5*kjcdr
  ##@$1.1.1.1+++jmjh
  1.1.1.1333
  33331.1.1.1
  @5.5.5.??????
  ~3de.ede5.5.5.5
  1.1.1.13444r54
  192.9.30.174
  &&^#%5.5.5.5
  :5.5.5.5@%%^^&*
  :5.5.5.5:
  **22.22.22.22
  172.78.0.1()*5.4.3.277
  3.3.3ki.3.

파일 예 2 헌장은 숫자와 "."를 제외한 모든 문자를 제거한 후 각 새 단어가 줄바꿈됩니다.

  192.0.22.1
  0.1
  32 5.500.5.5
  1.1.1.1
  1.1.1.1333
  33331.1.1.1
  5.5.5.
  .
  5.5.5.5
  1.1.1.13444
  54
  192.9.30.174
  5.5.5.5
  5.5.5.5
  5.5.5.5
  22.22.22.22
  172.78.0.1 
  5.4.3.277
  3.3.3 .3.

답변1

이것은 고전이다tr사용 사례이므로 가장 간단한 방법은 다음과 같습니다.

tr -cs '[:digit:].' '[\n*]' < input > output

매개변수는 [:digit:].일치시킬 문자(숫자 및 점)를 지정합니다. [\n*]바꿀 문자를 지정합니다 (모든 것을 줄 바꿈으로 바꿉니다). 이 -c옵션은 숫자와 점을 제외한 모든 것을 원하므로 첫 번째 인수를 반전합니다. -s두 번째 문자열의 연속된 개행 문자를 하나로 압축합니다.

답변2

grep은 다음을 수행할 수 있습니다.

grep -o '[0-9.]\+'

답변3

sed원하지 않는 문자를 줄 바꿈으로 바꾼 다음 다음을 grep사용하여 빈 줄을 제거 할 수 있습니다 .

sed 's/[^0-9.]/\n/g' | grep . 

결과는 귀하가 게시한 것과 다릅니다. 32 5.500.5.5마지막 행과 두 행으로 분할됩니다.

Perl 솔루션: 각 줄을 원치 않는 문자로 분할하고 비어 있지 않은 줄을 찾습니다.

perl -ne 'print "$_\n" for grep /./, split /[^0-9.]+/'

답변4

RHEL7에서:

VALUETOEDIT로 시작하는 모든 줄을 바꿉니다.

sed -i -e 's/^VALUETOEDIT.*/NEWVALUE/g' somefile

관련 정보