Groups | Search | Server Info | Keyboard shortcuts | Login | Register


Groups > comp.unix.shell > #25991

Re: a sed question

From Salvador Mirzo <smirzo@example.com>
Newsgroups comp.unix.shell
Subject Re: a sed question
Date 2024-12-21 09:17 -0300
Organization A noiseless patient Spider
Message-ID <87ed21xmb3.fsf@example.com> (permalink)
References <874j304vv3.fsf@example.com> <vk40gi$3g9sm$1@dont-email.me>

Show all headers | View raw


Janis Papanagnou <janis_papanagnou+ng@hotmail.com> writes:

> On 18.12.2024 20:46, Salvador Mirzo wrote:
>> (*) Summary
>> 
>> I wrote a sed script that makes a line replacement after it finds the
>> right spot.  So far so good.  Then I added quit command after the
>> change, but the quit does not seem to take effect---violating my
>> expectation.  I'll appreciate any help on understanding what's going on.
>
> First (before I forget it) change your string comparison '<' to the
> numerical comparison operator '-lt' as in:   test $# -lt 2 && usage
> Otherwise, if you get used to using the wrong operator, you may get
> subtle errors in future if you continue that habit.

Changed.  Why is it the wrong operator?  It seems it's not the standard
one---checking just now on the POSIX.1 spec.  I think I just tried it
out and given it worked as expected, I didn't think of checking it.  I'm
new to the whole thing.

> Also note that using $* may not work correctly (e.g. depending on
> filenames [containing spaces] used). The safe form is a quoted  "$@"

I learned something here.

--8<-------------------------------------------------------->8---
$ cat script.sh
#!/bin/sh
echo dollar-star $*
./script dollar-star $*

echo quoted-dollar-star "$*"
./script "$*"

echo dollar-at $@
./script $@

echo quoted-dollar-at "$@"
./script "$@"

$ cat script.c
#include <stdio.h>

int main(int argc, char *argv[]) {
  printf("\nfull cmdline: ");
  for (int i = 0; i < argc; ++i) {
    printf("%s ", argv[i]);
  }
  printf("\nargs: %d\n", argc);
  for (int i = 0; i < argc; ++i) {
    printf("arg %d: %s\n", i, argv[i]);
  }
  return 0;
}
--8<-------------------------------------------------------->8---

$ ./script.sh 1 2 "th ree"
dollar-star 1 2 th ree

full cmdline: ./script dollar-star 1 2 th ree
args: 6
arg 0: ./script
arg 1: dollar-star
arg 2: 1
arg 3: 2
arg 4: th
arg 5: ree
quoted-dollar-star 1 2 th ree

full cmdline: ./script 1 2 th ree
args: 2
arg 0: ./script
arg 1: 1 2 th ree
dollar-at 1 2 th ree

full cmdline: ./script 1 2 th ree
args: 5
arg 0: ./script
arg 1: 1
arg 2: 2
arg 3: th
arg 4: ree
quoted-dollar-at 1 2 th ree

full cmdline: ./script 1 2 th ree
args: 4
arg 0: ./script
arg 1: 1
arg 2: 2
arg 3: th ree
$

> (Then I was tempted to make a similar comment as Kenny. But...)

I'm studying and I often go back to the past to see what life was I
like.  I initially tried to solve the problem with /ed/, but did not
find a way to insert a string coming from the a shell script's cmdline.
Then I thought that /sed/ was there to make /ed/ more scriptable.

> WRT your question I'd be interested to understand more about the
> intention of your original question...

The intention is mostly in the paragraph above, but the way I study is
to put things in real-world practice as much as possible.  (When I
realize the solution is indeed too old to make sense, I replace it.
Otherwise I stick with it.)  I have a literate programming file that
contains a chunk that's the version of the program I'm writing.  So when
you ask the program its version, the information is included in the
executable, an idea which I like.  I get the version with a git command
such as

$ git log --oneline | head -1 | awk '{print $1}'
2566d31

So I wanted to include such string in the literate programming file.  At
first I wrote a solution in the programming language I'm using, but I
remember seeing many older software using sed for something like that,
so I decided to study sed a bit.  I read the sed part of Dale Dougherty
and Arnold Robbins's book "sed & awk", second edition, and I thought sed
was quite neat and sensible.  What I'm noticing now is that there are
too many different sed behavior out there to make it sensible to use.
UNIX systems as a whole are like that, so I'm used to reminding myself
of using the common subset of everything.  Perhaps the common subset of
sed is too small.  If I have to use it just for search and replace, then
perhaps it's not really worth it.

> I mean if you don't trust your 'sed' command just pipe it though
> 'less'; there's no need to change the 'sed' program just for that.
>
> Personally I'd try whether it works (by adding "something" before
> and also after the desired place in your sample.txt to be sure the
> other occurrences were not changed), and then just call
>
>   sed -e '/<<Release>>=/,+1s/something/sth else/'  sample.txt
>
> to see it working.

Thanks for the excellent instruction!

Back to comp.unix.shell | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

a sed question Salvador Mirzo <smirzo@example.com> - 2024-12-18 16:46 -0300
  Re: a sed question John-Paul Stewart <jpstewart@personalprojects.net> - 2024-12-18 15:12 -0500
  Re: a sed question Ralf Damaschke <rwspam@gmx.de> - 2024-12-19 01:14 +0000
    Re: a sed question Salvador Mirzo <smirzo@example.com> - 2024-12-19 09:05 -0300
      Re: a sed question Ralf Damaschke <rwspam@gmx.de> - 2024-12-20 00:55 +0000
        Re: a sed question gazelle@shell.xmission.com (Kenny McCormack) - 2024-12-20 12:44 +0000
          Re: a sed question Ralf Damaschke <rwspam@gmx.de> - 2024-12-21 00:17 +0000
            Re: a sed question Kaz Kylheku <643-408-1753@kylheku.com> - 2024-12-21 03:09 +0000
              sed... (Was: a sed question) gazelle@shell.xmission.com (Kenny McCormack) - 2024-12-21 03:36 +0000
                Re: sed... (Was: a sed question) Kaz Kylheku <643-408-1753@kylheku.com> - 2024-12-21 03:57 +0000
                Re: sed... (Was: a sed question) Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-12-21 15:38 +0100
                Re: sed... (Was: a sed question) Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-12-21 17:29 +0100
                Re: sed... Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-12-21 14:23 -0800
                Re: sed... Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-12-22 00:33 +0100
                Re: sed... (Was: a sed question) Lars Poulsen <lars@cleo.beagle-ears.com> - 2024-12-21 21:46 +0000
                Re: sed... (Was: a sed question) Kaz Kylheku <643-408-1753@kylheku.com> - 2024-12-22 21:22 +0000
              Re: a sed question Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-12-21 15:35 +0100
              Re: a sed question Ralf Damaschke <rwspam@gmx.de> - 2024-12-22 00:43 +0000
  Re: a sed question Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-12-20 15:55 +0100
    Checking for right # of args in a shell script (Was: a sed question) gazelle@shell.xmission.com (Kenny McCormack) - 2024-12-20 15:11 +0000
      Re: Checking for right # of args in a shell script (Was: a sed question) Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-12-20 16:49 +0100
        Re: Checking for right # of args in a shell script (Was: a sed question) gazelle@shell.xmission.com (Kenny McCormack) - 2024-12-20 17:43 +0000
    Re: a sed question Salvador Mirzo <smirzo@example.com> - 2024-12-21 09:17 -0300
      Re: a sed question Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-12-21 16:19 +0100
        Re: a sed question Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-12-21 13:41 -0800
          Re: a sed question Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-12-22 00:50 +0100
            Re: a sed question Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-12-21 16:26 -0800
              Re: a sed question Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-12-22 01:41 +0100
            Re: a sed question Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-12-22 00:31 +0000
              Re: a sed question Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-12-22 02:06 +0100
      Re: a sed question Andy Walker <anw@cuboid.co.uk> - 2024-12-21 15:34 +0000
        Re: a sed question Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-12-21 17:14 +0100
        Re: a sed question Salvador Mirzo <smirzo@example.com> - 2024-12-21 15:21 -0300
          Re: a sed question Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-12-21 20:48 +0100
      Re: a sed question Helmut Waitzmann <nn.throttle@xoxy.net> - 2024-12-21 19:20 +0100
    Re: a sed question Ordatious <order@order.invalid> - 2024-12-22 09:19 +0000
      Re: a sed question Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-12-22 19:23 +0100
  Re: a sed question Ed Morton <mortonspam@gmail.com> - 2024-12-21 08:13 -0600
    Re: a sed question Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-12-21 21:09 +0000
      Re: a sed question Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-12-22 01:02 +0100
        Re: a sed question Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-12-22 00:28 +0000
          Re: a sed question Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-12-21 16:36 -0800
            Re: a sed question Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-12-22 01:52 +0000
              Re: a sed question Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-12-21 21:09 -0800
                Re: a sed question Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-12-22 05:56 +0000
                Re: a sed question Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-12-21 22:55 -0800
                Re: a sed question Eric Pozharski <apple.universe@posteo.net> - 2024-12-23 10:09 +0000
                Re: a sed question gazelle@shell.xmission.com (Kenny McCormack) - 2024-12-23 12:41 +0000
                Re: a sed question Kaz Kylheku <643-408-1753@kylheku.com> - 2024-12-23 18:47 +0000
                Re: a sed question Eric Pozharski <apple.universe@posteo.net> - 2024-12-24 11:20 +0000
          Re: a sed question Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-12-22 02:22 +0100
      Re: a sed question gazelle@shell.xmission.com (Kenny McCormack) - 2024-12-22 01:09 +0000
      Re: a sed question Kaz Kylheku <643-408-1753@kylheku.com> - 2024-12-22 20:03 +0000
      Re: a sed question Ed Morton <mortonspam@gmail.com> - 2024-12-23 07:26 -0600
        How to solve The Miracle (was Re: a sed question) Janis Papanagnou <janis_papanagnou+ng@hotmail.com> - 2024-12-23 21:09 +0100
        Re: a sed question Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-12-23 22:57 +0000
          Re: a sed question Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2024-12-23 15:06 -0800
            Re: a sed question Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-12-24 00:28 +0000
              Re: a sed question anthk <anthk@openbsd.home> - 2025-03-23 09:45 +0000
                Re: a sed question Lawrence D'Oliveiro <ldo@nz.invalid> - 2025-03-23 23:41 +0000
          Re: a sed question Ed Morton <mortonspam@gmail.com> - 2024-12-24 06:20 -0600
            Dealing with four-year-olds... (Was: a sed question) gazelle@shell.xmission.com (Kenny McCormack) - 2024-12-24 12:58 +0000
            Re: a sed question Lawrence D'Oliveiro <ldo@nz.invalid> - 2024-12-24 20:57 +0000
              Re: a sed question Kaz Kylheku <643-408-1753@kylheku.com> - 2024-12-24 21:46 +0000
                Arguing with a four-year-old (Was: a sed question) gazelle@shell.xmission.com (Kenny McCormack) - 2024-12-24 23:53 +0000

csiph-web