Gezielten Teil eines Textblocks ändern

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Fallout, 08.04.2010.

  1. #1 Fallout, 08.04.2010
    Zuletzt bearbeitet: 08.04.2010
    Fallout

    Fallout Doppel-As

    Dabei seit:
    02.03.2007
    Beiträge:
    120
    Zustimmungen:
    0
    Hi,

    ich meine hier mal etwas ähnliches gesehen zu haben aber kann leider nix passendes finden. Es geht darum, die Mountoptionen eines bestimmten Mountpoints in der fstab zu ändern.
    Zu Grunde liegt GNU bash, version 3.2.48(1)

    Code:
    [font=courier]
    /dev/cciss/c0d0p2    swap                 swap       defaults              0 0
    /dev/sysvg/root      /                    ext3       [b]defaults[/b]             1 1
    /dev/cciss/c0d0p1    /boot                ext3       acl,user_xattr        1 2
    /dev/sysvg/data      /data                reiserfs   defaults              1 2
    /dev/sysvg/home      /home                ext3       defaults              1 2
    /dev/sysvg/opt       /opt                 ext3       defaults              1 2
    /dev/sysvg/tmp       /tmp                 ext3       defaults              1 2
    /dev/sysvg/usr       /usr                 ext3       defaults              1 2
    /dev/sysvg/var       /var                 ext3       defaults              1 2
    proc                 /proc                proc       defaults              0 0
    sysfs                /sys                 sysfs      noauto                0 0
    debugfs              /sys/kernel/debug    debugfs    noauto                0 0
    usbfs                /proc/bus/usb        usbfs      noauto                0 0
    devpts               /dev/pts             devpts     mode=0620,gid=5       0 0
    [/font]
    soll z. B. werden zu:

    Code:
    [font=courier]
    /dev/cciss/c0d0p2    swap                 swap       defaults              0 0
    /dev/sysvg/root      /                    ext3       [b]noacl,relatime[/b]      1 1
    /dev/cciss/c0d0p1    /boot                ext3       acl,user_xattr        1 2
    /dev/sysvg/data      /data                reiserfs   defaults              1 2
    /dev/sysvg/home      /home                ext3       defaults              1 2
    /dev/sysvg/opt       /opt                 ext3       defaults              1 2
    /dev/sysvg/tmp       /tmp                 ext3       defaults              1 2
    /dev/sysvg/usr       /usr                 ext3       defaults              1 2
    /dev/sysvg/var       /var                 ext3       defaults              1 2
    proc                 /proc                proc       defaults              0 0
    sysfs                /sys                 sysfs      noauto                0 0
    debugfs              /sys/kernel/debug    debugfs    noauto                0 0
    usbfs                /proc/bus/usb        usbfs      noauto                0 0
    devpts               /dev/pts             devpts     mode=0620,gid=5       0 0
    [/font]
    Angesetzt habe ich mal ähnlich wie:
    Code:
    [font=courier]
    mp='/'
    file=/etc/fstab
    regmp=$(echo $mp|sed 's#/#\\/#g')   # escape slashes
    newopts='noacl,relatime'
    
    oldline=$(awk "\$2~/^$regmp$/" $file)
    newline=$(awk "\$2~/^$regmp$/" $file | awk "\$4=\"$newopts\"")
    sed "s#$oldline#$newline#" $file
    [/font]
    Das Ganze funktioniert soweit scheinbar ganz gut - nun möchte ich aber ganz gerne natürlich noch die Optik einigermaßen halten sodaß zumindest bis zu den Mountoptions die Anzahl der Whitespaces eingehalten wird was aber scheinbar awk bei der Übergabe in die Variable auf das nötigste runterkürzt.
    Also aus
    Code:
    [font=courier]/dev/sysvg/root      /                    ext3       defaults              1 1[/font]
    wird
    Code:
    [font=courier]/dev/sysvg/root / ext3 noacl,relatime 1 1[/font]
    Hat jemand eine Idee wie man das noch in den Griff bekommen könnte?

    Gruß Daniel
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    [edit]
    Hm, eine Idee wäre noch das Ganze so umzubauen daß nicht awk für die Ersetzung verwendet wird sondern sed:
    Code:
    [font=courier]
    mp='/'
    file=/etc/fstab
    regmp=$(echo $mp|sed 's#/#\\/#g')   # escape slashes
    newopts='noacl,relatime'
    
    oldline=$(awk "\$2~/^$regmp$/" $file)
    oldopts=$(awk "\$2~/^$regmp$/{print \$4}" $file)
    newline=$(awk "\$2~/^$regmp$/" $file | sed "s#$oldopts#$newopts#")
    sed "s#$oldline#$newline#" $file
    [/font]
    Zumindest werden die Whitespaces damit nicht beschnitten.

    Gruß Daniel
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bytepool, 08.04.2010
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    awk kennt die Variable OFS, damit kannst du den output field separator festlegen, den koenntest du z.B. auf ein tab setzen. Auch nicht optimal, aber minimal besser.

    mfg,
    bytepool
     
Thema:

Gezielten Teil eines Textblocks ändern

Die Seite wird geladen...

Gezielten Teil eines Textblocks ändern - Ähnliche Themen

  1. IT-Systemadministrator/in in Teilzeit oder freiberuflich

    IT-Systemadministrator/in in Teilzeit oder freiberuflich: Wir suchen ab sofort in Teilzeit (20 Std./Woche) oder freiberuflich eine/n IT-Systemadministrator/in. Ihr Aufgabengebiet: Administration,...
  2. GSoC 2016: Teilnehmer angekündigt

    GSoC 2016: Teilnehmer angekündigt: Der Suchmaschinenbetreiber Google hat die Namen der akzeptierten Teilnehmer bekannt gegeben, die im Rahmen des diesjährigen Summer of Code (GSoC)...
  3. Systemadministrator/ in als Teilzeitstelle

    Systemadministrator/ in als Teilzeitstelle: Systemadministrator/ in als Teilzeitstelle Die DiOmega GmbH ist eine Agentur mit Sitz in Frankfurt am Main, die sich auf IT- und...
  4. Großbritannien fördert Bürgerbeteiligung durch die Initiative »Digital by Default«

    Großbritannien fördert Bürgerbeteiligung durch die Initiative »Digital by Default«: Großbritanniens Government’s Digital Service (GDS) hat 2015 die Initiative »Digital by Default« gestrafft, um Richtlinien zur Erstellung...
  5. EU verteilt Forschungsgelder an Open-Source-Projekte

    EU verteilt Forschungsgelder an Open-Source-Projekte: Der Europäische Forschungsrat (ERC) stattet vier Open-Source-Forschungsprojekte mit Forschungsgeldern aus. Weiterlesen...