Přihlásit
: [1]
   |   
: spojeni grep a sed  ( 5151 )
strublos
Sr. Member
****

Karma: 9
: 336



« : August 12, 2010, 15:05:25 »

Jde nejak docilit tohotok:

:
cat soubor.txt | grep status | awk {'print $3'} | sed 's/\t/  /g;' -i

o co jde ze souboru soubor.txt vem radky s textem status kde ve tretim sloupci je cesta k souboru a tento bych chtel projet prikazem sed a nahradit tabulatory dvoj mezerou a zapsat do stejneho souboru - proto parametr -i u sedu

jen nevim co s tim sedem tam to pak nejak nefunguje
zatim to mam tak ze seznam se vypise do jenoho souboru ktery pak zpracovavam radek po radku (while) a ctu to prikazu sed

diky za rady
lukas.v
Full Member
***

Karma: 2
: 145


« #1 : August 22, 2010, 13:05:50 »

Nazdar.

Díval jsem se tvůj příkaz. A moc jsem nepochopil, proč to máš tak složité.
A nejsem si jistý, jestli pochopil, kde jsou ty tabulátory. V tom řádku s textem status?

Trochu jsem ho upravil: (nevím, jak to přesně máš - takže jsem to si domyslel)
sed 's/status\t=\t/status  =  /g;' -i soubor.txt

Tipuju, že když necháš vypsat soubor, pak příkaz aplikace sed nezapisuje do souboru, ale do toho co dostane na vstupu.
Zápis mu ovšem znemožní parametr -i, za kterým má být vstupní soubor.
A co víc, myslím, že stačí použít buď awk nebo sed (ne oba).

Jak jsem se dozvěděl, stačí, když v hledaném řetězci bude sice jen kousek řádku, ale bude jednoznačný.

A pokud máš status někde mimo, tak že se to nedá jednoduše napsat, asi bude lepší když to necháš tak, jak to máš teď.

Edit:
Něco by mělo udělat s tím stylem zdrojové kódu. Nejsou vidět první písmena.
« : August 22, 2010, 17:10:26 lukas.v »

PC: 1.6GHz, 2GB RAM, 250GB HDD; Mageia 1 - 64bit; KDE 4.6.5
Netbook - Asus Eee 1000H: 1.6 GHz, 2GB RAM, 160 GB HDD; Debian Squeeze 32bit, KDE 4.4.5; Windows XP SP3
lukas.v
Full Member
***

Karma: 2
: 145


« #2 : August 22, 2010, 13:22:59 »

Mám taky problém s příkazem sed.
Poradíš mi?

Mám tento kód:
FRD_OPTIONS="$HOME/.FRD/syscmd.properties"
DIR="DIR="
SED_PROGRAM="s/$DIR//g"
FRD_DIR=`cat $FRD_OPTIONS | grep "$DIR" | sed -e $SED_PROGRAM`


Pomocí skriptu bych chtěl zjistit cestu, kde je uložený program FreeRapid Downloader.
Je to zapsané takto:
DIR=cesta

Určitě se to dá zapsat jednodušeji, ale nevím jak.
A co je hlavní, i když je výsledkem požadovaná cesta, celé se do proměnné uloží takto:
$'cesta'
Chtěl bych tam mít jenom tu cestu.

Takže momentálně mi to funguje tak, že mám cestu zadanou napevno.
« : August 22, 2010, 13:29:02 lukas.v »

PC: 1.6GHz, 2GB RAM, 250GB HDD; Mageia 1 - 64bit; KDE 4.6.5
Netbook - Asus Eee 1000H: 1.6 GHz, 2GB RAM, 160 GB HDD; Debian Squeeze 32bit, KDE 4.4.5; Windows XP SP3
strublos
Sr. Member
****

Karma: 9
: 336



« #3 : August 24, 2010, 09:27:46 »

No pokud je v tom souboru syscmd.properties radek treba DIR=/tmp/.FRD/bla
tak tvuj postup a v $FRD_DIR je jen cesta

No jak jsem psal vyse ze souboru kde grepuju status ziskam jmena souboru a tyto soubory pak chci projet sedem a prepsat.
_dworkin


« #4 : October 17, 2010, 14:54:13 »

Reaguji na uplne prvni prispevek.

"cat soubor.txt | grep status | awk {'print $3'} " doted to chapu, ale ne co s tim dal chces delat. Protoze tohle ti ze vstupniho souboru vyseka jen treti sloupce z radku ktere obsahovaly "status". Nebudes tam mit zadne taby, ktere chces zamenit a uz vubec nemuzes editovat zpetne soubor.txt kdyz ti dojde jen jeho zbytek a v originale nejak zamenit tab.
Vzhledem k tomu ze se snazis zapisovat do puvodniho souboru tak asi to vysekani tretiho sloupce nechces a myslis to jako dodatecnou podminku hledaneho radku, cite "kde ve tretim sloupci je cesta k souboru". A asi chces zachovat i ostatni radky.

#!/bin/bash

cat soubor.txt | while read radek; do
  test=`echo $radek | grep "status"`
  if [ "$radek" == "" ]; then
     echo "$radek";
  else
     echo "$radek" | sed "s/\t/\ \ /g";
  fi
done


Je to bez te pochybne podminky ze na tretim sloupci ma byt cesta.
: [1]
   |   
 
: