BASH - Jak nahradit text v souboru

host

BASH - Jak nahradit text v souboru
« kdy: 27. 01. 2019, 19:18:24 »
Ahoj,
může mi prosím někdo poradit, jak v bash opravit údaje v souboru za znakem = podle ID před znakem =? Děkuji

41564=aaa aaa
7564=bbb bbb
874=ccc ccc
15=ddd ddd


Kachna

Re:BASH - Jak nahradit text v souboru
« Odpověď #1 kdy: 27. 01. 2019, 19:26:07 »
awk, sed

Radovan.

Re:BASH - Jak nahradit text v souboru
« Odpověď #2 kdy: 27. 01. 2019, 19:30:13 »

gll

  • ****
  • 429
    • Zobrazit profil
    • E-mail
Re:BASH - Jak nahradit text v souboru
« Odpověď #3 kdy: 27. 01. 2019, 19:44:39 »
Není jasné co chceš. Ukaž jak má vypadat výsledek po nahrazení.

host

Re:BASH - Jak nahradit text v souboru
« Odpověď #4 kdy: 27. 01. 2019, 20:21:21 »
Čísla vlevo jsou jako ID toho textu a dejme tomu, že chci nahradit text s ID 874

před opravou

41564=aaa aaa
7564=bbb bbb
874=ccc ccc
15=ddd ddd

po opravě

41564=aaa aaa
7564=bbb bbb
874=ccc2 ccc2
15=ddd ddd


peter

Re:BASH - Jak nahradit text v souboru
« Odpověď #5 kdy: 27. 01. 2019, 20:43:57 »
ze by:

echo '41564=aaa aaa' | awk -F'=' '{print $2"="$1}'

Franta <xkucf03/>

Re:BASH - Jak nahradit text v souboru
« Odpověď #6 kdy: 27. 01. 2019, 20:44:59 »
Jako domácí úkol ti to asi neprojde, ale pro zajímavost :-)

Kód: [Vybrat]
$ cat data.txt
41564=aaa aaa
7564=bbb bbb
874=ccc ccc
15=ddd ddd

Kód: [Vybrat]
$ cat data.txt \
    | perl -ne 'if (/([^=]+)=(.*)/) { print "$1\0$2\0"; }' \
    | relpipe-in-cli generate-from-stdin data 2 id integer hodnota string \
    | relpipe-tr-guile 'data' '(if (= $id 874) (set! $hodnota "ccc2 ccc2") ) #t' \
    | relpipe-out-tabular
data:
 ╭──────────────┬──────────────────╮
 │ id (integer) │ hodnota (string) │
 ├──────────────┼──────────────────┤
 │        41564 │ aaa aaa          │
 │         7564 │ bbb bbb          │
 │          874 │ ccc2 ccc2        │
 │           15 │ ddd ddd          │
 ╰──────────────┴──────────────────╯
Record count: 4

Kód: [Vybrat]
$ cat data.txt \
    | perl -ne 'if (/([^=]+)=(.*)/) { print "$1\0$2\0"; }' \
    | relpipe-in-cli generate-from-stdin data 2 id integer hodnota string \
    | relpipe-tr-guile 'data' '(if (= $id 874) (set! $hodnota "ccc2 ccc2") ) #t' \
    | relpipe-out-nullbyte \
    | while read_nullbyte id hodnota; do echo "$id=$hodnota"; done
41564=aaa aaa
7564=bbb bbb
874=ccc2 ccc2
15=ddd ddd

czipis

  • ***
  • 225
    • Zobrazit profil
    • E-mail
Re:BASH - Jak nahradit text v souboru
« Odpověď #7 kdy: 27. 01. 2019, 21:01:27 »
Kód: [Vybrat]
sed -i 's/^874=.*$/874=ccc2 ccc2/g' data.txt

peter

Re:BASH - Jak nahradit text v souboru
« Odpověď #8 kdy: 27. 01. 2019, 21:21:26 »
sypem si popol na hlavu, som si povodne myslel ze ich treba prehodit, kazdopadne tu je opravene awk riesenie:

Kód: [Vybrat]
cat data.txt | awk -F'=' '{if ($2=="ccc ccc") $2="ccc2 ccc2"; print $1"="$2}'
ale skor sa priklanam k sed rieseniu od czipisa

gll

  • ****
  • 429
    • Zobrazit profil
    • E-mail
Re:BASH - Jak nahradit text v souboru
« Odpověď #9 kdy: 27. 01. 2019, 21:39:28 »
ruby

Kód: [Vybrat]
ruby -pe '$_.gsub!(/ccc/, "ccc2") if /874/' < data.txt

nebo perl

Kód: [Vybrat]
perl -pe 's/ccc/ccc2/g if /874/' < data.txt

.

Re:BASH - Jak nahradit text v souboru
« Odpověď #10 kdy: 27. 01. 2019, 22:59:04 »
Jako domácí úkol ti to asi neprojde, ale pro zajímavost :-)
Ta zajímavost je, jak moc jsi s tím trapný?

Kit

Re:BASH - Jak nahradit text v souboru
« Odpověď #11 kdy: 27. 01. 2019, 23:06:41 »
Jako domácí úkol ti to asi neprojde, ale pro zajímavost :-)
Ta zajímavost je, jak moc jsi s tím trapný?

Dyť je to hezký, ne?

Kit

Re:BASH - Jak nahradit text v souboru
« Odpověď #12 kdy: 27. 01. 2019, 23:16:57 »
Kód: [Vybrat]
sed -i 's/^\(874=\).*$/\1ccc2 ccc2/' data.ini

k3dAR

  • *****
  • 2 837
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Re:BASH - Jak nahradit text v souboru
« Odpověď #13 kdy: 28. 01. 2019, 01:41:16 »
[...]nahradit text s ID 874[...]
Kód: [Vybrat]
sed '/^874/s/ccc/ccc2/g' -i soubor

aaa158

  • ***
  • 238
    • Zobrazit profil
    • E-mail
Re:BASH - Jak nahradit text v souboru
« Odpověď #14 kdy: 28. 01. 2019, 10:02:22 »
[...]nahradit text s ID 874[...]
Kód: [Vybrat]
sed '/^874/s/ccc/ccc2/g' -i soubor

Lepsie:
Kód: [Vybrat]
sed '/^874=/s/ccc/ccc2/g' -i soubor