sub 和 gsub 函数?
Posted
技术标签:
【中文标题】sub 和 gsub 函数?【英文标题】:sub and gsub function? 【发布时间】:2012-05-09 10:28:48 【问题描述】:我有这个命令:
$ 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
【问题讨论】:
看看rename
命令。有两个版本。一种是 Perl 脚本,有时称为 prename
。另一个是util-linux-ng
包的一部分。两者都可以做你正在做的重命名类型。
【参考方案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 )'
【讨论】:
以上是关于sub 和 gsub 函数?的主要内容,如果未能解决你的问题,请参考以下文章