2012-04-29 97 views
12

我有这样的命令:AWK - 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 

谢谢你的帮助。

编辑:

我把 '回声' 来测试命令:

$ 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 

[email protected]:~ 

谢谢您的帮助。

+2

看看了'rename'命令。有两个版本。一个是Perl脚本,有时称为['prename'](http://man.he.net/man1/prename)。另一个是['util-linux-ng'](https://launchpad.net/util-linux-ng)包的一部分。要么可以做你正在做的重命名的类型。 – 2012-04-29 15:14:18

+0

感谢您的链接。 – Tedee12345 2012-04-29 19:12:25

回答

18

如果字符串包含一个以上的匹配将无法正常工作...试试这个:

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