2012-04-29 14 views
12

mam polecenie:AWK - funkcja sub i gsub?

$ find $PWD -name "*.jpg" | awk '{system("echo " $(sub(/\//, "_"))) }' 
_home/mol/Pulpit/test/1.jpg 

Teraz to samo, ale przy użyciu gsub:

$ find $PWD -name "*.jpg" | awk '{system("echo " $(gsub(/\//, "_"))) }' 

[email protected]:~ 

Chcę uzyskać wynik:

_home_mol_Pulpit_test_1.jpg 

dziękuję za pomoc.

EDIT:

kładę 'echo' przetestować polecenie:

$ find $PWD -name "*.jpg" | awk '{gsub("/", "_")} {system("echo " mv $0 " " $0) }' 
_home_mol_Pulpit_test_1.jpg _home_pic_Pulpit_test_1.jpg 

[email protected]:~ 

Chcę uzyskać wynik:

$ find $PWD -name "*.jpg" | awk '{gsub("/", "_")} {system("echo " mv $0 " " $0) }' 
/home/pic/Pulpit/test/1.jpg _home_pic_Pulpit_test_1.jpg 

[email protected]:~ 

Dziękuję za pomoc.

+2

Spójrz poleceniem 'rename'. Istnieją dwie wersje. Jednym z nich jest skrypt Perla, czasami nazywany ['prename'] (http://man.he.net/man1/prename). Inny jest częścią pakietu '' util-linux-ng'] (https://launchpad.net/util-linux-ng). Albo może dokonać zmiany nazwy, którą wykonujesz. –

+0

Dzięki za linki. – Tedee12345

Odpowiedz

18

To nie będzie działać, jeśli ciąg zawiera więcej niż jeden mecz ... spróbuj tego:

echo "/x/y/z/x" | awk '{ gsub("/", "_") ; system("echo " $0) }' 

lub lepsza (jeśli echo nie jest symbolem zastępczym dla czegoś innego):

echo "/x/y/z/x" | awk '{ gsub("/", "_") ; print $0 }' 

W twoim przypadku, gdy chcesz zrobić kopię wartości przed zmianą go:

echo "/x/y/z/x" | awk '{ c=$0; gsub("/", "_", c) ; system("echo " $0 " " c)}'