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 函数?的主要内容,如果未能解决你的问题,请参考以下文章

Ruby高级编程正则

string.find(查找获取字符串) string.gsub(查找替换字符串) string.sub(截取字符串)

R:在一个管道中组合几个 gsub() 函数

lua——string之string.gsub

awk从入土到入门(10)awk内置函数

我可以使用 gsub 函数找到一个模式并用 2 个不同的模式替换它吗?