다음 공백까지 공백을 포함하는 문자열의 모든 항목을 제거합니다.

다음 공백까지 공백을 포함하는 문자열의 모든 항목을 제거합니다.

다음 패턴을 따르는 텍스트에서 모든 항목을 제거하고 싶습니다.

  • 모든 게임은 리눅스에서 시작됩니다.
  • 모든 경기는 공백으로 끝납니다
  • (다음 공백까지 linux-*를 제거하십시오)

예: 이 기사에서 발췌:

ibudev1 libudev1 libweather-ion7 libxatracker2 linux-generic linux-headers-generic linux-image-generic linux-libc-dev linux-signed-generic mesa-va-drivers mesa-va-drivers mesa-vdpau-drivers mesa-vdpau-drivers milou

이것을 얻었습니다:

ibudev1 libudev1 libweather-ion7 libxatracker2 메사-va-드라이버 메사-va-드라이버 메사-vdpau-드라이버 메사-vdpau-드라이버 milou

Ubuntu 및 Bash 환경에서 실행되도록 설계되었습니다.

답변1

perl -lpe 's/(?!<\S)linux-\S*(\s+|$)//g'

그렇게 할 것이다. 단 linux-, 앞에 공백이 아닌 문자( (?!<\S)), 뒤에 공백이 아닌 문자( \S*), 하나 이상의 공백( \s+)이 뒤따르지 않거나 줄 끝이 아무 것도 대체되지 않는 경우에 한합니다 .

부정적인 뒤돌아보기 검사는 , ... 와 같은 패키지 이름에서 발견된 콘텐츠가 (?!<\S)일치하지 않도록 하는 것입니다 .linux-g++-i586-linux-gnuutil-linux-dbgsym

공백을 제거했습니다.뒤쪽에그러나 패키지 이름 앞에는 없습니다. 즉, 줄의 마지막 단어가 linux-*1이면 뒤에 공백이 남게 됩니다.

답변2

sed 's/linux-[^ ]* //g'

[^ ]*뒤에 공백이 아닌 문자가 오는 모든 문자와 일치하며 *다음 문자는 하나 이상의 문자를 나타냅니다.

답변3

printf '%s' "$list" | tr ' ' '\n' | grep -v '^linux-' | paste -sd " "

관련 정보