Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 09 Nov 2008 00:02:11 +0200
From:      Giorgos Keramidas <keramida@ceid.upatras.gr>
To:        bsd <bsd@todoo.biz>
Cc:        Liste FreeBSD <freebsd-questions@freebsd.org>
Subject:   Re: scripting text replacement
Message-ID:  <87skq1yizg.fsf@kobe.laptop>
In-Reply-To: <4B1A9F30-B8BC-4C48-A85F-3697C6AB3B7B@todoo.biz> (bsd@todoo.biz's message of "Sat, 8 Nov 2008 19:43:52 %2B0100")
References:  <4B1A9F30-B8BC-4C48-A85F-3697C6AB3B7B@todoo.biz>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, 8 Nov 2008 19:43:52 +0100, bsd <bsd@todoo.biz> wrote:
> Sorry for this cross posting, but I can not find a good "bash" mailing
> list=E2=80=A6
> I am certain FreeBSD gurus will provide me with a fast and reliable
> answer to this little question.
>
> Here is the deal:
> -----------------
>
> I have a file containing a list of items like that:
>
> line1item1 line1item2 line1item3
> line2item1 line2item2 line2item3
> =E2=80=A6400 times
>
> I need to insert this into another text file using printf() items should
> be converted into variable looping=E2=80=A6 like that:
>
> printf "Bla bla bla $1 bla bla $2 bla bla $3 bla bla $2"
>
> The main thing is that I can not get $1 $2 $3 to correspond to
> line1item1 line1item2 line1item3

A little more detail about the "Bla bla" part may be important in our
effort to help you effectively.  What you seem to describe above may be
trivial to do with awk(1):

,-----------------------------------------------------------------------
| $ cat /tmp/inputfile
| line1item1 line1item2 line1item3
| line2item1 line2item2 line2item3
| $ awk '{
|     printf "Bla bla bla %s bla bla %s bla bla %s bla bla %s\n",
|         $1, $2, $3, $2;
|   }' /tmp/inputfile
| Bla bla bla line1item1 bla bla line1item2 bla bla line1item3 bla bla line=
1item2
| Bla bla bla line2item1 bla bla line2item2 bla bla line2item3 bla bla line=
2item2
| $
`-----------------------------------------------------------------------

or with a short script in sed(1) or Perl:

,-----------------------------------------------------------------------
| $ perl \
|   -pe 's/(\S+)\s+(\S+)\s+(\S+)/Bla bla bla $1 bla bla $2 bla bla $3 bla b=
la $2/' \
|   /tmp/inputfile
| Bla bla bla line1item1 bla bla line1item2 bla bla line1item3 bla bla line=
1item2
| Bla bla bla line2item1 bla bla line2item2 bla bla line2item3 bla bla line=
2item2
| $
`-----------------------------------------------------------------------

More complex substitutions can be scripted in almost any scripting
language you prefer.

HTH,
Giorgos




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?87skq1yizg.fsf>