Portál AbcLinuxu, 17. července 2025 06:18


Dotaz: zjisteni a nahrada textu v bash

16.11.2009 11:39 nazdarek
zjisteni a nahrada textu v bash
Přečteno: 281×
Odpovědět | Admin
Ahoj, rad bych pres bash zjistil ,zda je v smb.conf nadefinovane urcite zdileni a pokud ano , tak jej zmenil za jine...

hledam toto: [test] path = /store1/test public = True writable = True browsable = False force user = root directory mask = 0770 create mask = 0770

nahrazuji timto:

[store2] path = /store2 public = True writable = False browsable = True force user = root directory mask = 0700 create mask = 0700

Jak na to v bashi? nazdarek

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

16.11.2009 11:55 l4m4
Rozbalit Rozbalit vše Re: zjisteni a nahrada textu v bash
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud to chceš opravdu psát v bashi, tedy nástroji zcela nevhodném pro daný účel, tak to asi děláš proto, že tě to baví, a v tom případě si to napiš, v bash(1) je vše potřebné, v Advanced Bash Scripting Guide pak nějaké hinty a příklady.

Pokud jsi ochoten připustit pro dosažení cíle použití i jiných programů, které z toho shellu spustíš, tak ksakru nepiš, že to má být v bashi. Co toto je za zlozvyk, že všichni píší, že něco chctějí vyřešit v bashi, když ve skutečnosti chtějí napsat skript (klidne spouštějící jiné programy), který problém řeší.
#!/bin/bash
perl -0777 -i -ple 's#\[test\]\s*path\s*=\s*/store1/test\s*\n\s*public\s*=\s*True writable...#[store2] path = /store2\n...#s' smb.conf
Regulární výraz nepíšu celý, protože je pekelně dlouhý, ale doplníš ho podle vzoru už snadno (\n je konec řádku, \s* libovolné množství bílých znaků, [ a ] je zapotřebí backslashovat).
nettezzaumana avatar 18.11.2009 14:41 nettezzaumana | skóre: 3
Rozbalit Rozbalit vše Re: zjisteni a nahrada textu v bash
$_ = do {local $/; <>; }; ## nacteme obsah souboru jako scalar
do {
    ## cestu nahradime natvrdo, nepredpokladam, ze to tam bude vickrat
    s@/mnt/data/Sun@/foo@;

    ## v sekci [Sun] nahradime pozadovany vyraz, v tomto pripade "read only = .*"
    ## ze se to provede jen v te sekci je dano pomoci ".[^[]*" ..
    s@(\[Sun\].[^[]*read only\s*=\s*).[^\n]*@$1blah@s;

} if qq/[Sun]/; ## provede se, pokud soubor obsahuje sekci [Sun] v tomto pripade
print
nettezzaumana avatar 18.11.2009 15:14 nettezzaumana | skóre: 3
Rozbalit Rozbalit vše Re: zjisteni a nahrada textu v bash
sorry, a nebo jeste lepe a jednoduseji:
## nacteme do $_ obsah smb.conf
$_ = do {local $/; <>; };

## jednoduse zmenime celou sekci [Sun] za obsah souboru /etc/passwd
s@\n\[Sun\]\n.[^[]*@`cat /etc/passwd`@se;
print

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.