다음 패턴을 따르는 텍스트에서 모든 항목을 제거하고 싶습니다.
- 모든 게임은 리눅스에서 시작됩니다.
- 모든 경기는 공백으로 끝납니다
- (다음 공백까지 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-gnu
util-linux-dbgsym
공백을 제거했습니다.뒤쪽에그러나 패키지 이름 앞에는 없습니다. 즉, 줄의 마지막 단어가 linux-*
1이면 뒤에 공백이 남게 됩니다.
답변2
sed 's/linux-[^ ]* //g'
[^ ]*
뒤에 공백이 아닌 문자가 오는 모든 문자와 일치하며 *
다음 문자는 하나 이상의 문자를 나타냅니다.
답변3
printf '%s' "$list" | tr ' ' '\n' | grep -v '^linux-' | paste -sd " "