DEV Community

sensen
sensen

Posted on

CLI for Efficiency #1

I tried KDE Plasma on my Ubuntu machine last weekend. After using it for a while, I decided that it is too complicated for me and I'd like to remove them from my machine.

To remove installed packages in Ubuntu is simple.

$ sudo apt remove package-name-1 package-name-2

But, there are a lot of packages installed automatically when you install KDE Plasma. Removing them one by one is definitely, well, inefficient. So, the challenge here is to get a list of installed KDE packages in proper format, so you can feed them into the command above.

Here's how I solve it in an efficient way.

apt as the interface for the package management system in Ubuntu provides a way for you to list installed packages. Here's one way to list installed packages which name contains kde.

$ apt list --installed | grep kde

.
.
debconf-kde-helper/disco 1.0.3-1 amd64 [installed,automatic]
kde-style-breeze/disco 4:5.15.4.1-0ubuntu1 [installed,automatic]
.
.

The output is not something we can feed into apt remove command directly, so we need to sanitize it quite a bit.

It's obvious that the package name is anything before /. We can use the cut command to do just that.

$ apt list --installed | grep kde | cut -d "/" -f 1

.
.
debconf-kde-helper
kde-style-breeze
.
.

Next, since each packages are listed in a new line, we still can't pass this output directly to the apt remove command. Let's replace the new line with space using tr command.

$ apt list --installed | grep kde | cut -d "/" -f 1 | tr '\n' ' '

.
.
debconf-kde-helper kde-style-breeze
.
.

Now, the output of installed KDE packages are now in proper format. We can now feed the output directly to apt remove command using xargs.

$ apt list --installed | grep kde | cut -d "/" -f 1 | tr '\n' ' ' | xargs sudo apt remove

It's amazing how these four simple tools: grep, cut, tr, and xargs, can help you automate and achieve your goal; saving you from the manual and repetitive labor.

How might you do it differently?

Top comments (1)

Collapse
 
ferricoxide profile image
Thomas H Jones II

You can collapse your two commands:

| grep kde | cut -d "/" -f 1 

Into one command:

| awk -F "/" '/-kde-/{ print $1 }'

Note: I set awk's search to the slightly longer -kde- (from your grep's kde) for more-precise targeting.

Similarly, if you really need your tr capability, you can subsume its use by switching up awk's outputer to printf (and using appropriate formatting-specification).