Portál AbcLinuxu, 17. července 2025 06:18
#!/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.confRegulá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).
$_ = 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
## 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
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.