sed: legelső előfordulás cseréje

 ( bzs | 2018. június 12., kedd - 18:54 )

Sziasztok.

A sed nagyon régóta jóbarátom, de valamit mégis elfelejtettem vele.

cat valami.txt | sed 's/\item A/\item \\huge{&}/1'

Szóval itt a legelső
\item A
részt cserélné erre:
\item \huge{A}
-ra, de nem teszi, holott az 1 épp erre utasítja. Illetve megteszi, csak a probléma az, hogy a sorra értelmezi, nem pedig az egész fájlra.

Hogyan lehet megadni a sednek, hogy a fájlt ne soronként dolgozza fel, hanem egyetlen bazinagy sorként? Mert akkor az 1-es szám szerint valóban az első előfordulást cserélné...

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

végignyálaztam, semmi sem úgy ment.
Aztán ráéreztem, ott volt az elején...

sed '0,/\item V/{s/\item V/\item \huge{V}/}'

Köszi!

Mivel a kérdésedet már megválaszolták, jelezném, hogy a példád hibás, mert a "mire cseréljük" szövegrészben az & a teljes mintát fogja jelenteni, azaz a "\item A" részt, szóval a végeredménynek "\item \\huge{\item A}" kéne lennie. És csak azért rosszabb még ennél is a helyzet, mert mivel a shell elől eltakartad, de a sed elől nem, ezért a \-ek nagy része nem marad meg.

=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?

Nos, ezért az undorítmányért meg fogtok ölni, de minimum elásni, admin meg kirúg:

# cat index-uj.sh 

sed '0,/\item A/{s/\item A/\item {\\LARGE{A}}/}' ./konyv_osszesfejezet-helyseg.ind >helysegTEMP.1
sed '0,/\item B/{s/\item B/\item {\\LARGE{B}}/}' ./helysegTEMP.1  >helysegTEMP.2
sed '0,/\item C/{s/\item C/\item {\\LARGE{C}}/}' ./helysegTEMP.2  >helysegTEMP.3
sed '0,/\item D/{s/\item D/\item {\\LARGE{D}}/}' ./helysegTEMP.3  >helysegTEMP.4
sed '0,/\item E/{s/\item E/\item {\\LARGE{E}}/}' ./helysegTEMP.4  >helysegTEMP.5
sed '0,/\item F/{s/\item F/\item {\\LARGE{F}}/}' ./helysegTEMP.5  >helysegTEMP.6
sed '0,/\item G/{s/\item G/\item {\\LARGE{G}}/}' ./helysegTEMP.6  >helysegTEMP.7
sed '0,/\item H/{s/\item H/\item {\\LARGE{H}}/}' ./helysegTEMP.7  >helysegTEMP.8
sed '0,/\item I/{s/\item I/\item {\\LARGE{I}}/}' ./helysegTEMP.8  >helysegTEMP.9
sed '0,/\item J/{s/\item J/\item {\\LARGE{J}}/}' ./helysegTEMP.9  >helysegTEMP.10
sed '0,/\item K/{s/\item K/\item {\\LARGE{K}}/}' ./helysegTEMP.10 >helysegTEMP.11
sed '0,/\item L/{s/\item L/\item {\\LARGE{L}}/}' ./helysegTEMP.11 >helysegTEMP.12
sed '0,/\item M/{s/\item M/\item {\\LARGE{M}}/}' ./helysegTEMP.12 >helysegTEMP.13
sed '0,/\item N/{s/\item N/\item {\\LARGE{N}}/}' ./helysegTEMP.13 >helysegTEMP.14
sed '0,/\item O/{s/\item O/\item {\\LARGE{O}}/}' ./helysegTEMP.14 >helysegTEMP.15
sed '0,/\item P/{s/\item P/\item {\\LARGE{P}}/}' ./helysegTEMP.15 >helysegTEMP.16
sed '0,/\item R/{s/\item R/\item {\\LARGE{R}}/}' ./helysegTEMP.16 >helysegTEMP.17
sed '0,/\item S/{s/\item S/\item {\\LARGE{S}}/}' ./helysegTEMP.17 >helysegTEMP.18
sed '0,/\item T/{s/\item T/\item {\\LARGE{T}}/}' ./helysegTEMP.18 >helysegTEMP.19
sed '0,/\item V/{s/\item V/\item {\\LARGE{V}}/}' ./helysegTEMP.19 >helysegTEMP.20
sed '0,/\item W/{s/\item W/\item {\\LARGE{W}}/}' ./helysegTEMP.20 >helysegTEMP.21
sed '0,/\item Y/{s/\item Y/\item {\\LARGE{Y}}/}' ./helysegTEMP.21 >helysegTEMP.22
sed '0,/\item Q/{s/\item Q/\item {\\LARGE{Q}}/}' ./helysegTEMP.22 >helysegTEMP.23
sed '0,/\item X/{s/\item X/\item {\\LARGE{X}}/}' ./helysegTEMP.23 >helysegTEMP.24
sed '0,/\item Sz/{s/\item Sz/\item {\\LARGE{SZ}}/}' ./helysegTEMP.24 >helysegTEMP.25
sed '0,/\item Cs/{s/\item Cs/\item {\\LARGE{Cs}}/}' ./helysegTEMP.26 >./konyv_osszesfejezet-helyseg.ind 
sed '0,/\item {\c C}/{s/\item {\c C}/\item {\\LARGE{{\c C}}}/}' ./helysegTEMP.25 >helysegTEMP.26
rm -f ./helyseg*


Gyakorlatilag egy latex indexfájlban cseréli az első betűket nagyra, hogy ,,szebb'' legyen...
Bizonyára egyszerűbb is lehetne, de ha megcsinálja...

bug: SZ csupa nagybetus lett.
Egyebkent azt hiszem, itt az ideje, hogy megtanulj egy tetszoleges P betus scriptnyelvet. Vagy felolem kezdodhet massal is..

--
If you get a good wife, you'll become happy; if you get a bad one, you'll become a philosopher. -Socrates

Nem bug, még a Cs-t is átírtam CS-vé.
Amúgy a latex-kimenet szép lett. Megtartom!

igen, perl és python elkelne!

Amúgy a bug nem más, mint a "\c C", azaz a török nyelvben is használt Ç karakter.
Ezt nem sikerült a seddel átírni. Na ez a bug. :(
Az eredeti .ind fájlban ez a sor szerepel erre vonatkozóan:

\item \IeC {\c C}anakkale\IdxPages \hyperpage{87}, \hyperpage{99}, \hyperpage{313}

És gőzöm sincs, mi a betű, a Ç karakter. Talán a
\IeC {\c C}
így egybeírva ?

ilyen esetekben lehet azt használni a sed-ben, hogy tud hexát is kezelni: sed -i 's/A/\xC3\x87/g' temp.txt

ezzel a temp. txt-ben a nagy A betűket kicseréled a török(?) C-dre.

Vagy akár egy tetszőleges S-betűs scriptnyelv is lehet (mondjuk az sh).

=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?

Vagy akár a sed-et (igaz, nem szkriptnyelv, de legalább S-sel kezdődik). Ez az egész kód kicserélhető egy sed-parancsra (ha az rm -rf-et nem számoljuk). Vagy akár ez is hasznos lehetne.

Igen, könnyen előfordulhat, hogy kicserélhető egyetlen sorra, de lusta voltam gondolkodni. Mire megírtam volna a szép kódot, már agyoneditoroztam magam a geanyban a ronda kód véglegesítésével.

Még csatornákat sem használtam. Szégyen!

Mar a sokadik olyan problemaba utkozik az utobbi par honapban, amit egy 10 soros perl/python/php koddal szepen megoldhatott volna. Ezert gondoltam, hogy lenne ra igeny.

--
If you get a good wife, you'll become happy; if you get a bad one, you'll become a philosopher. -Socrates

subscribe, ha lesz időm (nem lesz), otthonról majd ránézek.

----------------------------------
szélsőségesen idealista, fősodratú hozzászólás

A script az .ind fájlt szépen átalakítja, működik, csak ronda a kód és nem a teljes ábécére vonatkozik, ha meg a C betű elé egy török cs betűt teszek az \indexspace nem íródik bele az .ind fájlba, úgy kell behekkelni oda...