답변:
sed
파일을 수정하는 데 사용 :
sed -i '/^\(report\|-t\(h\|o\)\)/!d' your_file
sed
패턴과 일치하지 않는 모든 줄을 삭제 하도록 지시 합니다. 그 자체가 패턴 ^
(라인의 시작) 중 어느 하나 다음에 report
또는 -t
어느 한 다음 h
또는 o
.
실제 수정은 아닙니다 sed
. 임시 백업 복사본을 만들고 원본 파일을 덮어 씁니다.
당신이 원하는 경우 sed
(파일이 중요한 데이터를 포함하는 경우 좋은 아이디어가 될 수 있음) 원본 파일의 백업 사본을 보관하려면 줄 -i
스위치를 백업 파일을 만들 수있는 확장 :
sed -i'.bak' -e '/^\(report\|-t\(h\|o\)\)/!d' your_file
your_file
라는 원본의 백업을 수정 하고 생성합니다 your_file.bak
.
사이드 노트
내 의도를 오해하지 말거나 이것에 위배되지 마십시오.하지만 비슷한 정규 표현식 / 텍스트 처리 관련 질문이있는 것으로 나타났습니다. 난 당신이 학습을 시작 조언 sed
, awk
그리고 grep
자신에 대한 생산성까지 도움 속도. 다시 말하지만, 잘못 이해하지 마십시오. 나는 도와 주어서 너무 기쁩니다. 단지 당신이 매일 사용하기 위해 이러한 도구를 선택함으로써 큰 이익을 얻을 수 있다고 생각합니다.
사람들이 여기에 얼마나 도움이되는지 증명하기 위해 아래 의견에 @slm의 제안을 고려하고 언제든지이 대화방에 언제든지 문의하십시오.
간단한 grep을 사용할 수 있습니다.
$ grep -e '^report\|^-th\|^-to' filename
-th
/ -to
을 결합 할 수 -t[ho]
있습니다.
grep -e
또는egrep
질문자는 두 가지 점을 지적했습니다.
이 시점에서 솔루션은 첫 번째 지점과 두 번째 지점을 처리합니다. 그러나 파일이 더 크고 다음과 같다고 가정하십시오.
report aaaaaaaa
- ..
-th bbbbbbbbb
-to ccccccccc
anything else
.. --.
-tp ddd
-tq eee
- -----
OP의 두 번째 요점을 해결하지 않아도 될까요?
sed -r -i.bak '/^[ |.|-]*$/d' input-file
공백, 점 및 대시 만 포함하는 아마도 원치 않는 선을 제거하고 나머지는 그대로 유지하는 작업을 수행합니다.
두 가지 방법 중 하나의 위험은 파일의 특성이 올바르게 정의되어 있지 않다고 생각합니다.