Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Keith Thompson Newsgroups: comp.unix.shell Subject: Re: a sed question Date: Sat, 21 Dec 2024 13:41:22 -0800 Organization: None to speak of Lines: 41 Message-ID: <87bjx4ww71.fsf@nosuchdomain.example.com> References: <874j304vv3.fsf@example.com> <87ed21xmb3.fsf@example.com> MIME-Version: 1.0 Content-Type: text/plain Injection-Date: Sat, 21 Dec 2024 22:41:23 +0100 (CET) Injection-Info: dont-email.me; posting-host="2da3a0ffc775f005e8221f105190c671"; logging-data="252352"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19uunq2qYrU/rmDL+Q2S4tb" User-Agent: Gnus/5.13 (Gnus v5.13) Cancel-Lock: sha1:+Ukv8Ve2iCHRoXpYrwlfUhv9kHA= sha1:Runjw9qLe4E7KmjSnUNE5VEgo7I= Bytes: 2481 Janis Papanagnou writes: > On 21.12.2024 13:17, Salvador Mirzo wrote: [...] > As previously mentioned, 'sed' might not be the best choice for > developing such scripts; you might want to consider to learn 'awk'. > >> $ git log --oneline | head -1 | awk '{print $1}' >> 2566d31 > > With Awk you don't need 'head', it can be done like this > > $ git log --oneline | awk 'NR==1 {print $1}' > > (For long input files you may want an early exit > ...| awk 'NR==1 { print $1 ; exit(0) }' > but that just as an aside.) [...] This raises another issue: it's often possible to replace a command in a pipeline that filters output with an option to the command that does the same thing. There's no general rule for how to do this, since different commands do things differently, but for the example above: git log --oneline -n 1 | awk '{print $1}' or even: git log -n 1 --format=%h I haven't memorized the "--format" option, so I don't generally us it in ad-hoc one-liners, but I do use it in scripts. Note both of the above commands avoid generating the entire list of log entries, which could save significant time on a large repo. Using unnecessary commands in pipelines is Mostly Harmless, but IMHO it's good to think about how to do things more efficiently. See also "Useless use of cat" (UUOC). -- Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com void Void(void) { Void(); } /* The recursive call of the void */