[bash] Werkende one liner, maar werkt niet in bash functie

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Brent
  • Registratie: September 2001
  • Laatst online: 15-09 13:07
Ik heb een prachtig mooie functie gemaaktvonden, maar zodra ik heb in een functie in m'n bashrc stop, werkt het niet.

Werkt:
code:
1
find . -iname '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color -i "*een string*"' \;


Niet:
code:
1
zpdf() { find . -iname '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color -i "*een string*"' \; }


Ik vermoed iets met de terminator, maar het proberen van wat permutaties (eindigen met
code:
1
\; ;}
bijv.) levert geen juiste oplossing.

Bonusvraag: hoe kan ik een string passen naar grep? Normaal zou ik
code:
1
"*$@*"
doen, maar ivm subshell werkt dat niet.

Humanist | Kernpower! | Determinist | Verken uw geest | Politiek dakloos

Beste antwoord (via Brent op 28-11-2023 09:24)


  • Darkwing0928
  • Registratie: Oktober 2023
  • Laatst online: 02-02-2024
Ik heb je one-liner wat uitgekleed zodat hij werkt op mijn systeem.

code:
1
2
3
4
$ my_func() { find . -iname '*' -type f -exec sh -c 'cat "{}" | grep "blah"' \; ; }
$ my_func
blah
$


En voor de bonusvraag:

code:
1
2
3
4
5
$ my_func() { var=$1;find . -iname '*' -type f -exec sh -c 'cat "{}" | grep "'${var}'"' \; ; }
$ my_func blah
blah
$ my_func blah2
$

[ Voor 35% gewijzigd door Darkwing0928 op 28-11-2023 02:53 ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 15-09 22:42

Hero of Time

Moderator LNX

There is only one Legend

Waar is die laatste } voor in je oneliner? Er is geen opening accolade, dus het is wat gek om een sluitende te hebben.

Ook grep met * is compleet nutteloos, tenzij je een letterlijke * zoekt in de tekst. Je moet je ook gaan afvragen of het wel zo zinvol is om grep met kleur te gebruiken als je deze in een pipe gebruikt binnen de subshell van find.

Fix eerst eens deze items.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • Brent
  • Registratie: September 2001
  • Laatst online: 15-09 13:07
Dat is een copy paste foutje, is daar idd niet nodig.

Het gebruik van * in de groep string is zinvol omdat je anders matches op string start en eind (exacte match).

Het gebruik van kleur is zinvol omdat ook binnen de subshell dat prima werkt.

[ Voor 29% gewijzigd door Brent op 27-11-2023 21:32 ]

Humanist | Kernpower! | Determinist | Verken uw geest | Politiek dakloos


Acties:
  • 0 Henk 'm!

  • Hero of Time
  • Registratie: Oktober 2004
  • Laatst online: 15-09 22:42

Hero of Time

Moderator LNX

There is only one Legend

Zeg eens wat er niet werkt. Want net zelf getest en zelfs je one-liner doet geen fluit terwijl de string waar ik op zoek wél bestaat in de PDFs die ik gebruik.

Commandline FTW | Tweakt met mate


Acties:
  • 0 Henk 'm!

  • hcQd
  • Registratie: September 2009
  • Laatst online: 08:28
Brent schreef op maandag 27 november 2023 @ 21:31:
Het gebruik van * in de groep string is zinvol omdat je anders matches op string start en eind (exacte match).
Grep zoekt naar matches binnen een tekstregel, als je een exacte match wilt moet je ^ en $ gebruiken. Verder betekent een * bij grep wat anders dan in bash.

Waarschijnlijk handiger om te kijken of pdfgrep beschikbaar is voor je distro.

[ Voor 9% gewijzigd door hcQd op 28-11-2023 00:32 ]


Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • Darkwing0928
  • Registratie: Oktober 2023
  • Laatst online: 02-02-2024
Ik heb je one-liner wat uitgekleed zodat hij werkt op mijn systeem.

code:
1
2
3
4
$ my_func() { find . -iname '*' -type f -exec sh -c 'cat "{}" | grep "blah"' \; ; }
$ my_func
blah
$


En voor de bonusvraag:

code:
1
2
3
4
5
$ my_func() { var=$1;find . -iname '*' -type f -exec sh -c 'cat "{}" | grep "'${var}'"' \; ; }
$ my_func blah
blah
$ my_func blah2
$

[ Voor 35% gewijzigd door Darkwing0928 op 28-11-2023 02:53 ]


Acties:
  • 0 Henk 'm!

  • Brent
  • Registratie: September 2001
  • Laatst online: 15-09 13:07
@Darkwing0928 Thanks! Het dat hem dus in het dubbel escapen van de grep zoekstring lijkt.

@hcQd Ik wil juist geen exact match. Misschien haal ik de precieze incantatie met find door elkaar: daar heb ik m wel nodig. Ook is pdfgrep/ripgrep-all geen optie, ik zit vast in Windows git bash :X Ben allang blij dat pdftotext erbij zit.

[ Voor 20% gewijzigd door Brent op 28-11-2023 09:30 ]

Humanist | Kernpower! | Determinist | Verken uw geest | Politiek dakloos

Pagina: 1