Re: a sed question

Liste des GroupesRevenir à cu shell 
Sujet : Re: a sed question
De : smirzo (at) *nospam* example.com (Salvador Mirzo)
Groupes : comp.unix.shell
Date : 21. Dec 2024, 13:17:20
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <87ed21xmb3.fsf@example.com>
References : 1 2
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!

Date Sujet#  Auteur
18 Dec 24 * a sed question64Salvador Mirzo
18 Dec 24 +- Re: a sed question1John-Paul Stewart
19 Dec 24 +* Re: a sed question16Ralf Damaschke
19 Dec 24 i`* Re: a sed question15Salvador Mirzo
20 Dec 24 i `* Re: a sed question14Ralf Damaschke
20 Dec 24 i  `* Re: a sed question13Kenny McCormack
21 Dec 24 i   `* Re: a sed question12Ralf Damaschke
21 Dec 24 i    `* Re: a sed question11Kaz Kylheku
21 Dec 24 i     +* sed... (Was: a sed question)8Kenny McCormack
21 Dec 24 i     i`* Re: sed... (Was: a sed question)7Kaz Kylheku
21 Dec 24 i     i +* Re: sed... (Was: a sed question)4Janis Papanagnou
21 Dec 24 i     i i`* Re: sed... (Was: a sed question)3Janis Papanagnou
21 Dec 24 i     i i `* Re: sed...2Keith Thompson
22 Dec 24 i     i i  `- Re: sed...1Janis Papanagnou
21 Dec 24 i     i `* Re: sed... (Was: a sed question)2Lars Poulsen
22 Dec 24 i     i  `- Re: sed... (Was: a sed question)1Kaz Kylheku
21 Dec 24 i     +- Re: a sed question1Janis Papanagnou
22 Dec 24 i     `- Re: a sed question1Ralf Damaschke
20 Dec 24 +* Re: a sed question18Janis Papanagnou
20 Dec 24 i+* Checking for right # of args in a shell script (Was: a sed question)3Kenny McCormack
20 Dec 24 ii`* Re: Checking for right # of args in a shell script (Was: a sed question)2Janis Papanagnou
20 Dec 24 ii `- Re: Checking for right # of args in a shell script (Was: a sed question)1Kenny McCormack
21 Dec 24 i+* Re: a sed question13Salvador Mirzo
21 Dec 24 ii+* Re: a sed question7Janis Papanagnou
21 Dec 24 iii`* Re: a sed question6Keith Thompson
22 Dec 24 iii `* Re: a sed question5Janis Papanagnou
22 Dec 24 iii  +* Re: a sed question2Keith Thompson
22 Dec 24 iii  i`- Re: a sed question1Janis Papanagnou
22 Dec 24 iii  `* Re: a sed question2Lawrence D'Oliveiro
22 Dec 24 iii   `- Re: a sed question1Janis Papanagnou
21 Dec 24 ii+* Re: a sed question4Andy Walker
21 Dec 24 iii+- Re: a sed question1Janis Papanagnou
21 Dec 24 iii`* Re: a sed question2Salvador Mirzo
21 Dec 24 iii `- Re: a sed question1Janis Papanagnou
21 Dec 24 ii`- Re: a sed question1Helmut Waitzmann
22 Dec 24 i`- Re: a sed question1Janis Papanagnou
21 Dec 24 `* Re: a sed question28Ed Morton
21 Dec 24  `* Re: a sed question27Lawrence D'Oliveiro
22 Dec 24   +* Re: a sed question12Janis Papanagnou
22 Dec 24   i`* Re: a sed question11Lawrence D'Oliveiro
22 Dec 24   i +* Re: a sed question9Keith Thompson
22 Dec 24   i i`* Re: a sed question8Lawrence D'Oliveiro
22 Dec 24   i i `* Re: a sed question7Keith Thompson
22 Dec 24   i i  `* Re: a sed question6Lawrence D'Oliveiro
22 Dec 24   i i   `* Re: a sed question5Keith Thompson
23 Dec 24   i i    `* Re: a sed question4Eric Pozharski
23 Dec 24   i i     `* Re: a sed question3Kenny McCormack
23 Dec 24   i i      +- Re: a sed question1Kaz Kylheku
24 Dec 24   i i      `- Re: a sed question1Eric Pozharski
22 Dec 24   i `- Re: a sed question1Janis Papanagnou
22 Dec 24   +- Re: a sed question1Kenny McCormack
22 Dec 24   +- Re: a sed question1Kaz Kylheku
23 Dec 24   `* Re: a sed question12Ed Morton
23 Dec 24    +- How to solve The Miracle (was Re: a sed question)1Janis Papanagnou
23 Dec 24    `* Re: a sed question10Lawrence D'Oliveiro
24 Dec 24     +* Re: a sed question4Keith Thompson
24 Dec 24     i`* Re: a sed question3Lawrence D'Oliveiro
23 Mar 25     i `* Re: a sed question2anthk
24 Mar 25     i  `- Re: a sed question1Lawrence D'Oliveiro
24 Dec 24     `* Re: a sed question5Ed Morton
24 Dec 24      +- Dealing with four-year-olds... (Was: a sed question)1Kenny McCormack
24 Dec 24      `* Re: a sed question3Lawrence D'Oliveiro
24 Dec 24       `* Re: a sed question2Kaz Kylheku
25 Dec 24        `- Arguing with a four-year-old (Was: a sed question)1Kenny McCormack

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal