Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Alex 25. 11. 2017, 18:17:17
-
Ahoj,
mám textový soubor ve kterém je výstup z SHA (hash a cesta k souboru) oddělený mezerou. Bohužel i názvy souboru mají mezeru, takže nemůžu přijít jak si zobrazit pouze cestu.
Nejlepší by bylo v awk definovat $1 do $NF - ale nikde jsem něco nenašel.
Jelikož hashe jsou stejně dlouhé, dalo by se nějak na 66 pozici vložit jiný oddělovač?
-
cut -d\ -f2-
-
Co třeba takhle?
sha256sum * | sed 's/.\{64\}//'
-
Jinak když pošlete ten výstup, tak se na to klidně mrknu.
-
Co třeba takhle?
sha256sum * | sed 's/.\{64\}//'
Jo a tady jsem nevkládal oddělovač, ale odstranil ten první sloupec.
(V mém případě z sha256sum.)
-
Fungují obě varianty:
| cut -d\ -f2-
| sed 's/.\{64\}//'
Kvůli přehlednosti se mi víc líbí "cut", Nicméně se to musí ještě zpracovat. Prvním charakterem zůstává mezera. shasum generuje mezi hashem a názvem souboru dvě mezery. Všiml jsem si toho až teď.
-
Fungují obě varianty:
| cut -d\ -f2-
| sed 's/.\{64\}//'
Kvůli přehlednosti se mi víc líbí "cut", Nicméně se to musí ještě zpracovat. Prvním charakterem zůstává mezera. shasum generuje mezi hashem a názvem souboru dvě mezery. Všiml jsem si toho až teď.
V tom případě bude lepší varianta:
sha256sum * | sed -r 's/.{66}//'
Tohle by mělo odstranit i ty mezery na začátku, případně bude stačit upravit číslo ve složené závorce. Jinak více informací o sed je třeba tady:
http://www.theunixschool.com/2014/08/sed-examples-remove-delete-chars-from-line-file.html
-
Ak máte súbor vstupne data.txt, tak
shasum "vstupne data.txt"
vypíše
f572d396fae9206628714fb2ce00f72e94f2258f vstupne data.txt
POSIXový cut podporuje aj vypisovanie od konkrétneho poľa do konca:
shasum "vstupne data.txt" | cut -d' ' -f3-
Berieme dáta od tretieho poľa do konca. Druhé políčko je prázdne, lebo medzi hashom a názvom súboru sú dve medzery.
---
Alternatívne cez awk, tiež v POSIXe:
shasum "vstupne data.txt" | awk '{ print substr($0, 43) }'
Ak má hash 40 znakov a dva znaky sú na oddeľovacie medzery, zoberiem od 43 znaku z celého riadka ($0) do konca.
-
Alternatívne cez awk, tiež v POSIXe:
shasum "vstupne data.txt" | awk '{ print substr($0, 43) }'
Ak má hash 40 znakov a dva znaky sú na oddeľovacie medzery, zoberiem od 43 znaku z celého riadka ($0) do konca.
Řešení s awk pro mojí situaci funguje perfektně.
Jinak děkuju všem za odpovědi.
-
Jo, až teraz mi napadlo: POSIX cut vie sekať aj od konkrétneho znaku, nielen od delimitera, čo je ešte kratší zápis
shasum "vstupne data.txt" | cut -c43-
"Zober od štyridsiatehotretieho znaku do konca".
-
Další variace sedu - bez vazby na délku hashe:
cat filename | sed 's/^[^ ][^ ]* \(.*\)$/\1/'
-
Nebo variace bez referencování (inspirace z předchozích přízpěvků):
cat filename | sed 's/^[^ ][^ ]* //'