2012-04-29 161 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)}'