특정 문자에서 줄을 자르는 방법

특정 문자에서 줄을 자르는 방법

내 파일에 다음과 같은 줄이 많이 있습니다.

word_word_word 0 word_word
word_word_word 1 wordwordword
word word word word 0 word word word word
word 2 word_word_word word word
word word_word 3 word

이 파일을 캡처하여 다음과 같은 출력을 얻고 싶습니다.

word_word_word 0
word_word_word 1
etc...

/awk/ 또는 다른 줄을 잘라내고 첫 번째 바이트부터 첫 번째 한 자리까지 모든 것을 표시하려면 어떻게 해야 합니까?

감사해요!

답변1

grep을 사용하세요:

grep -oP '^.*?\s[0-9](\s|$)' file

-o옵션은 grep에게 일치하는 항목만 인쇄하도록 지시합니다.

패턴은 다음을 찾고 있습니다.

  • 줄의 시작^
  • 다음은 중복된 콘텐츠입니다(욕심 없음)..*?
  • 그 뒤에 공백이 있다\s
  • 그 뒤에 0에서 9 사이의 단일 숫자가 옵니다.[0-9]
  • 마지막으로 단일 숫자 뒤에는 공백이나 줄 끝이 와야 합니다.(\s|$)

답변2

for 루프에 대해 awk를 사용하십시오.

awk '{
  for(i=1;i<=NF;i++){
    if($i ~ /[0-9]/){
      printf "%s\n",$i;
      break
    }
    printf "%s ",$i
  }
}' file

당신은 당신이 원하는 것을 얻을 것이다.

답변3

이것이 (모든 UNIX 시스템의 모든 쉘에서 sed 사용) 필요한 것이 아닌 경우 이것이 적용되지 않는 행을 포함하여 더 나은 예를 제공하도록 질문을 편집하십시오.

$ sed 's/\( [0-9]\) .*/\1/' file
word_word_word 0
word_word_word 1
word word word word 0
word 2
word word_word 3

관련 정보