次のパターンに従うテキストからすべての項目を削除したいと思います。
- すべてのゲームはLinuxで始まります。
- すべての試合は空白で終わります
- (次のスペースまで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 mil
これを得ました:
ibudev1 libudev1 libweather-ion7 libxatracker2 メサ-va-ドライバ メサ-va-ドライバ メサ-vdpau-ドライバ メサ-vdpau-ドライバ milou
UbuntuとBash環境で動作するように設計されています。
答え1
perl -lpe 's/(?!<\S)linux-\S*(\s+|$)//g'
そうするでしょう。ただしlinux-
、前に空白以外の文字((?!<\S)
)、後に空白以外の文字(\S*
)、1つ以上の空白(\s+
)が付いていない場合、または行末が何も置き換えられない場合に限ります。
否定的な振り返りチェックは、...などのパッケージ名で見つかったコンテンツが(?!<\S)
一致しないようにすることです。linux-
g++-i586-linux-gnu
util-linux-dbgsym
スペースを削除しました。後ろにただし、パッケージ名の前にはありません。つまり、行の最後の単語がlinux-*
1の場合、後にスペースが残ります。
答え2
sed 's/linux-[^ ]* //g'
[^ ]*
後に空白以外の文字が続くすべての文字と一致し、*
次の文字は1つ以上の文字を表します。
答え3
printf '%s' "$list" | tr ' ' '\n' | grep -v '^linux-' | paste -sd " "