숫자와 "."를 제외한 파일의 모든 문자를 제거하는 방법, 각 단어(숫자/점)는 파일의 새 줄에 있어야 합니다. 예 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