2012-04-29 5 views
12

У меня есть эта команда:AWK - функция sub и gsub?

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

Теперь то же самое, но с использованием GSUB:

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

[email protected]:~ 

Я хочу, чтобы получить результат:

_home_mol_Pulpit_test_1.jpg 

Спасибо за вашу помощь.

EDIT:

Я поставил 'эхо', чтобы проверить команду:

$ 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]:~ 

Я хочу, чтобы получить результат:

$ 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]:~ 

Спасибо за вашу помощь.

+2

Посмотрите на 'rename' команды. Есть две версии. Одним из них является Perl-скрипт, иногда называемый ['prename'] (http://man.he.net/man1/prename). Другой является частью пакета ['util-linux-ng' (https://launchpad.net/util-linux-ng). Либо можно сделать тип переименования, который вы делаете. –

+0

Спасибо за ссылки. – Tedee12345

ответ

18

Это не будет работать, если строка содержит более одного матча ... Попробуйте это:

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

или лучше (если echo не заполнителем для чего-то еще):

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

в вашем случае, если вы хотите сделать копию значения перед изменением:

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

 Смежные вопросы

  • Нет связанных вопросов^_^