Tagged: unix

Unix: Replace newlines with sed

Imagine we have this file

Line one

Line two

And we want to remove the double new line.

This ugly looking command will replace all the newlines with nothing.

sed ':a;N;$!ba;s/\n\n//' YOURFILE

The :a says create a label - we’ll need this in a moment.

The N says append the next line onto the current pattern - we need this since we’re matching two lines. So say we’re trying to match the double newline this will give us ‘\n\n’ in our pattern space.

The $ matches the last line, i.e. in ‘\n\n’ we’ll be right at the end. And the ! inverts that. So here’s we’re matching the first ‘\n’ since this is not the last line.

Then the ba means go back to our label that we just created. So if we’re not on the last line, go back and do the match on the next part. This seems to be so the newline doesn’t halt the match.

unix sed

Using sed to alter the first and last line of a file

Sed normally alters every line of a file. You can change this by either prepending the expression with a number or a dollar sign for the last line.

cat some_file | sed '1 s/^\(.\)/START OF FILE\1/' | sed '$ s/\(.\)$/\1END OF FILE/'

This takes the first character on the first line, and adds ‘START OF FILE’ before it.

The second command takes the last character on the last line, and adds ‘END OF FILE’ after it.

sed unix

Unix: Basics of Gawk

The basic syntax of this command is usually:

    gawk '<gawk command>' filename

Within the gawk command, the format is:

    BEGIN { <operations> } /<pattern match>/ { <operations> } /<another pattern>/ { <another op> } END { <operations> }

The BEGIN and END parts are optional. As is the pattern match.

Within the main operations block, you can use the NF variable to find many fields are on this line.

This gawk program will only print non-blank lines, since blank lines have a NF of 0:

    gawk '{ if(NF!=0) print $0 }' filename

The ‘print $0’ will print the whole line. The $1 will print the first field and so on. Fields are separated by spaces and/or tabs.

Pattern matching will allow you to only print lines with, in this case, the word ‘hello’ in them:

    gawk '/hello/ { print $0 }' filename

If you place a ‘~’ before the pattern match, it will be inverted.

There are many other things gawk can do, including variables, addition of fields and many more.

unix awk

Unix: Change the keyboard layout using a key switch

If you want to type using another keyboard quickly you can use setxkbmap to change your X windows keyboard using a keymap.

Let’s say you want to switch from a us keyboard to a french keyboard. Use setxkbmap us,fr -option grp:ralt_shift_toggle

Then press right alt and shift together to switch between the two. I hold shift then tap alt gr


Vim: rebind escape and caps lock on the command line

If you are using vim a lot, and touch type, you may find reaching up to press escape all the time ruins your typing.

You can rebind escape to caps lock, and vice versa, throughout all your X apps using xmodmap.

Use this in ~/.Xmodmap

clear Lock
keycode 9 = Caps_Lock
keycode 0x42 = Escape

And then use the command, probably in your ~/.bashrc, xmodmap ~/.Xmodmap to do the rebind.

vim unix

Page 1 of 12