sub和gsub函数?

Ted*_*345 18 awk substring r

我有这个命令:

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

现在同样的事情,但使用gsub:

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

mol@mol:~
Run Code Online (Sandbox Code Playgroud)

我想得到结果:

_home_mol_Pulpit_test_1.jpg
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.

编辑:

我把'echo'用来测试命令:

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

mol@mol:~
Run Code Online (Sandbox Code Playgroud)

我想得到结果:

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

mat*_*ata 27

如果字符串包含多个匹配,那将无效...试试这个:

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

或更好(如果echo不是其他东西的占位符):

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

在您的情况下,您希望在更改之前复制该值:

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