Подтвердить что ты не робот

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:

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

$ 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
4b9b3361

Ответ 1

Это не сработает, если строка содержит более одного совпадения... попробуйте следующее:

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 )}'