我要删除以下文本中的所有匹配:
示例:从本文中:
ibudev1 libudev1 libc va 7 libxatracker2 linux-泛型linux头通用linux图片泛型linux-libc-dev linux签名泛型mesa驱动程序mesa vdpau驱动程序mesa vdpau驱动程序milou
拿着这个:
ibudev1 libudev1 libudev1 I0 7 libxatracker2台面-va-a-va-驱动器台面-vdpau-司机台面-vdpau-司机milou
它将在Ubuntu上运行,所以Bash环境。
发布于 2019-03-25 17:34:40
sed 's/linux-[^ ]* //g'[^ ]*匹配以下所有非空格字符,*匹配一个或多个字符
发布于 2019-03-25 17:35:44
perl -lpe 's/(?!<\S)linux-\S*(\s+|$)//g'就能做到。这是linux-,前提是它前面没有一个非空格((?!<\S)),后面跟着任意数量的非空白(\S*),后面跟着一个或多个空白空间(\s+),或者行的末尾没有任何替换。
(?!<\S)负回顾检查是为了避免在包名中找到的linux-上匹配,如g++-i586-linux-gnu,util-linux-dbgsym.
请注意,我们移除包名后的空白,但不是在包名称之前。这意味着,如果行上的最后一个单词是linux-*,那么后面就会留下空白。
发布于 2019-03-25 21:05:03
printf '%s' "$list" | tr ' ' '\n' | grep -v '^linux-' | paste -sd " "https://unix.stackexchange.com/questions/508566
复制相似问题