내 파일에 다음과 같은 줄이 많이 있습니다.
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