특정 수 이상의 특수 문자가 있는 텍스트에서 줄을 잡는 가장 좋은 방법이 무엇인지 궁금합니다.
각 줄에 4개의 쉼표가 있다는 것을 이미 알고 있고 ,
4개 이상의 쉼표가 포함된 줄을 찾고 싶다고 가정해 보겠습니다.,
예
hi,hello,how,are,you
catch,me,then,say,hello,then
산출
catch,me,then,say,hello,then
답변1
펄 솔루션:
perl -ne 'print if tr/,// > 4'
-n
파일을 한 줄씩 읽기- 이것tr 연산자일치하는 수를 반환합니다.
4줄 미만으로 인쇄하려면 >
로 변경하면 됩니다 <
.
답변2
사용 grep
명령:
grep -E '(,.*){5}' myfile
작업을 수행합니다. 설명하다:
-E
:확장 정규식을 사용하세요...
'(,.*)
: ... 쉼표 뒤에 임의 개수의 문자(0이라도 포함)가 오는 것을 찾습니다...
{5}'
:...그리고 이전 패턴을 5번 반복합니다.
쉼표가 4개 미만인 줄을 찾으려면 다음이 필요합니다.
grep -xE '([^,]*,){0,3}[^,]*' myfile
이번에는 -x
전체 라인과 일치하도록 패턴을 라인의 시작과 끝 부분에 고정해야 합니다. [^,]*
대신 사용합니다 . .*
그렇지 않으면 후자가 ,
s를 포함하는 문자열을 .
일치 항목 으로 행복하게 일치시킵니다.어느특징.
-v
또 다른 접근 방식은 이전 접근 방식과 반대입니다. "4 미만" 대아니요"적어도 4개"이므로 다음과 같습니다.
grep -vE '(,.*){4}' myfile
답변3
버전 awk
:
awk -F, 'NF > 5' myfile
답변4
다음 줄을 통해 얻은 결과
l=`awk 'BEGIN{print }{print gsub(",","")}' example.txt |sed '/^$/d' |awk '$1 > 4 {print NR}'`;sed -n ''$l'p' example.txt
output
catch,me,then,say,hello,then