我有这个命令:
$ find $PWD -name "*.jpg" | awk '{system( "echo " $(sub(/\//, "_")) ) }'
_home/mol/Pulpit/test/1.jpg
现在同样的事情,但使用 gsub:
$ find $PWD -name "*.jpg" | awk '{system( "echo " $(gsub(/\//, "_")) ) }'
mol@mol:~
我想得到结果:
_home_mol_Pulpit_test_1.jpg
感谢您的帮助。
编辑:
我用'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:~
我想得到结果:
$ find $PWD -name "*.jpg" | awk '{gsub("/", "_")} {system( "echo " mv $0 " " $0) }'
/home/pic/Pulpit/test/1.jpg _home_pic_Pulpit_test_1.jpg
最佳答案
如果字符串包含多个匹配项,那将不起作用......试试这个:
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 )}'
关于r - sub 和 gsub 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10371553/