2

How can I indent a file such as its first line?

Example:

A file containing

 x=1+2+3+4+ 5+6+7+8 +9+10+12 

should be converted to

 x=1+2+3+4+ 5+6+7+8 +9+10+12 

I need this inside a shell-script on a Linux system. One-liners are preferred.

5
  • does the first line always start with x=? Commented Dec 13, 2012 at 16:44
  • @foampile no, just an example Commented Dec 13, 2012 at 16:48
  • are you limited to shell or can you use a scripting language? Commented Dec 13, 2012 at 16:53
  • @foampile I can use any common script language. Speed is less important. Commented Dec 13, 2012 at 17:03
  • i was gonna suggest Perl. @Birei below posted a good answer. albeit i am increasingly liking awk as well Commented Dec 13, 2012 at 17:07

3 Answers 3

5

One way using perl:

perl -pe 'if ($. == 1) { m/^(\s*)/; $space = $1 || q{}; next } s/^\s*/$space/' infile 

It yields:

 x=1+2+3+4+ 5+6+7+8 +9+10+12 
5

You can do this in awk:

awk 'NR==1{split($0,a,/[^ \t]/)}{sub(/^[ \t]*/,a[1]);print}' file.in 
2

With sed:

sed -e '1{h;s/[^[:blank:]].*//;x;b' -e '}' -e 'G;s/[[:blank:]]*\(.*\)\n\(.*\)/\2\1/' 

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.