我一直在环顾四周,但没有找到我正在尝试的东西。我不得不说我对 grep、sed 和 awk 的了解有点差。
我有一个别名:
alias upgradable='apt list --upgradable'
它让我得到了我需要的东西:
thunderbird/bionic-updates,bionic-security 1:68.4.1+build1-0ubuntu0.18.04.1 amd64 [upgradable from: 1:68.2.2+build1-0ubuntu0.18.04.1]
thunderbird-gnome-support/bionic-updates,bionic-security 1:68.4.1+build1-0ubuntu0.18.04.1 amd64 [upgradable from: 1:68.2.2+build1-0ubuntu0.18.04.1]
但是我只想得到第一个单词,即它的标题。尝试了很多东西但都失败了。
我该如何进行?
答案1
要打印第一个之前的所有内容,/
您可以使用cut
:
alias upgradable='apt list --upgradable | cut -d'/' -f1
或者awk
:
alias upgradable="apt list --upgradable | awk -F'/' '{print \$1}'"
答案2
任何正则表达式都会 d.
alias upgradable='apt list --upgradable | perl -pe "s|\s.*||" '
你的输出:
thunderbird/bionic-updates,bionic-security
或者
alias upgradable='apt list --upgradable | perl -pe "s|/.*||" '
你的输出:
thunderbird
perl -pe
会将所有内容视为一行,并将 '\n' 视为常规字符。这样,它将丢弃第一个白色字符(第一个示例)或“/”(第二个示例)后面的所有内容,包括这些分隔符。
答案3
你提到grep
:
apt list --upgradable | grep -o "^.*\/" | cut -d'/' -f1
我不知道它与awk
或 的速度相比如何sed
。