How to indent lines in text files using sed, awk, perl
Suppose I have a text file named input.txt, and I want to indent each line in the file by 5 spaces.
The following are different ways to do the same thing:
$ cat input.txt
12
34
56
78
The following are different ways to do the same thing:
- sed
$ sed 's/^/ /' input.txt
12
34
56
78
s/^/ / searches for the beginning of a line (^), and "replaces" that with 5 spaces. - awk
$ awk '{ print " " $0 }' input.txt
12
34
56
78 - perl
$ perl -pe 's/^/ /' input.txt
12
34
56
78
- sed
$ sed '1,3s/^/ /' input.txt
12
34
56
78
Note that the comma specifies a range (from the line before the comma to the line after). - awk
$ awk 'NR==1,NR==3 {$0 = " "$0} {print }' input.txt
12
34
56
78
An awk program consists of condition/action pairs. The first pair has the condition "if NR (current line number) is from 1 to 3", and the action is to append 5 spaces to $0 (the current line). The second pair has a null condition which means it applies to every line, and the action is just to print the line. - perl
$ perl -pe '$_ = " " . $_ if 1 <= $. and $. <=3' input.txt
$. is the current input line number. $_ is the current line. . (dot) is the concatenate operator.
12
34
56
78
Click here for another post on sed tricks.