Nowe posty

xx Debian https w apt (0)
Dzisiaj o 11:28:17
xx Jak usunąć kilka dowiązań twardych jednym poleceniem. (3)
2019-06-14, 12:12:10
xx Skrypt sprawdzający miejsce na dysku (1)
2019-06-13, 13:55:00
xx Samba server (3)
2019-06-10, 17:01:44
xx Skrypt tworzący użytkownika (3)
2019-06-07, 17:11:55
xx Jaki serwis komp. we Wrocławiu (0)
2019-06-06, 12:39:23
xx serwer wydruku (1)
2019-06-04, 13:57:58
xx mod_security i roundcube (0)
2019-05-27, 14:27:03
xx Touchpad po pewnym losowym czasie przestaje reagować (33)
2019-05-27, 10:14:21
xx [ROZWIĄZANY] przygotowanie zeskanowanego pdf do OCR (6)
2019-05-24, 14:46:43

Autor Wątek: masowa zmiana tresci w plikach tekstowych  (Przeczytany 2112 razy)

Offline Zbyszek

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 2
    • Zobacz profil
masowa zmiana tresci w plikach tekstowych
« dnia: 2015-05-23, 21:09:32 »
Mam katalog.
W katalogu podkatalogi, a w podkatalogach, kilka plików tekstowych.
W plikach tekstowych są scieżki bezpośrednie, odwołujące się do pozostałych plików w danym podkatalogu. Czasami jest to c:\\katalog\\podkatalog a innym razem \\\\ADRES_IP_PC\\udział\\katalog a jeszcze innym razem  \\\\ADRES_IP_PC\\c:\\katalog\\podkatalog.
Plików są tysiące a zamierzam je przenieść na inną maszynę, inny dysk do innego katalogu.
Jak zmienić te ścieżki? Próbuje sed'em ale na razie bez sukcesu.

Zbyszek

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2156
  • 1709
    • Zobacz profil
masowa zmiana tresci w plikach tekstowych
« Odpowiedź #1 dnia: 2015-05-23, 21:35:23 »
W skryptach basha jesli skrypt i pliki które używa znajduja się w jednym katalogu np. w katalogu "Moje",
to  gdziekolwiek przenieniesz katalog "Moje", skrypt dalej bedzie działał i złatwością je znajdzie, za pomocą takiej zmiany ścieżki:
/cośtam/cośtam/Moje/katalog/plik
na
`pwd`/katalog/plik
W czasie wykonywania skryptu "pwd" jest zastąpione ścieżką skąd wykonywany jest skrypt.

Odnośnie twojego przykładu...
Co chcesz żeby dokładnie sed zrobił?
Możesz podać przykład jak ma wyglądać rezultat?
Pochwal się swoją kartą graficzną w tym wątku-->
http://forum.linux.pl/index.php/topic,19841.msg121122.html#msg121122

Offline Zbyszek

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 2
    • Zobacz profil
masowa zmiana tresci w plikach tekstowych
« Odpowiedź #2 dnia: 2015-05-24, 16:25:50 »
Zamiana miałaaby by dotyczyć treści wszystkich plików w podkatalogach z zachowaniem obecnej ścieżki wzglednej a więc przykładowo
c:\\katalog\\podkataloga\\podkatalogb na z:\\katalog\\podkataloga\\podkatalogb

lub
\\\\ADRES_IP\\udział\\c:\\katalog\\podkatalog2\\podkatalogc na z:\\katalog\\podkatalog2\\podkatalogc

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2156
  • 1709
    • Zobacz profil
masowa zmiana tresci w plikach tekstowych
« Odpowiedź #3 dnia: 2015-05-24, 18:12:55 »
wygooglalem...  
http://www.nfire.eu/?m=articles&article_id=43
postanowiłem że zamieni " c: " na " z: " , bo jest to ciąg znaków unikalny,
ale tym dwukropkiem coś nie działało,
szukałem coś o dwukropku...
http://pl.comp.os.linux.narkive.com/uePegTOF/usuni-cie-dwukropkow-z-ci-gu-znakow
a więc,
sed -e  's/c:'/z:'/g' plik
powinno w pliku zamienić " c: "  na  " z: ".
aaa...
i to jeszcze nie wszystko,
wynik musisz sobie nadpisać jakoś do pliku.

Do wiekszej liczby plików lub wszystkich zrobilbym skrypt który wyszuka te pliki
i liste zapisze do pliku,
nastepnie skrypt by przeczytal każdą linie, i wykonał polecenie sed do każdego pliku.

taki sobie przykład (fragment):
	# In $file  is $ad lines.
ad=$(cat -n $file | tail -1 | awk '{print $1}')

for i in `seq 1 $ad`
do
ae=$(awk 'NR=='$i $file)
# ae=line from file

sed -e  's/c:'/z:'/g'  $ae
done
Edit:
Nadpisywanie tego samego pliku (przykład):
echo -e "$(cat `pwd`/tmp/surce.bak | grep -v "$TREE")" > `pwd`/tmp/surce.bak
.


Edytowane:
Albo... , z przykładów znalezionych w wyszukiwarce można tak:
 sed -i -e 's/c:'/z:'/g' plik
powinno odrazu nadpisać

Cytuj
sed --help
...
  -i[SUFFIX], --in-place[=SUFFIX]
                 edit files in place (makes backup if SUFFIX supplied)
Pochwal się swoją kartą graficzną w tym wątku-->
http://forum.linux.pl/index.php/topic,19841.msg121122.html#msg121122