2012-07-24 250 views
0

我怎樣才能開展與下面的sed替換?SED替代使用通配符

輸入

group_0 group_10 n_name_0 n_name_10 n_name_20 n_name_5 n_name_40 team_20 team_1 

所需輸出

group_0 group_10 n_name n_name n_name n_name n_name n_name team_20 team_1 

我嘗試使用SED -i的/ n_name */n_name/G',但它n_name後刪除一切

回答

1
sed -i 's:\(n_name\)_[[:digit:]]*:\1:g' 
+0

請參閱編輯的問題。謝謝 – 2012-07-24 21:29:49

+0

我給了你一個詳細的答案。它對你有幫助嗎? – alinsoar 2012-07-24 21:40:54

+0

group_0 group_10 team_20 team_1。我看到這個輸出。該字符串被替換爲類似於[] – 2012-07-24 22:33:59

0

作品根據您輸入的數據:

sed -r 's/_[0-9]+//g' 

看到下面的一行:

kent$ echo "group0 group1 n_name_0 n_name_10 n_name_20 n_name_5 n_name_40 team0 team1"|sed -r 's/_[0-9]+//g' 
group0 group1 n_name n_name n_name n_name n_name team0 team1 

更新

更新的新輸入

sed -r 's/(n_name)_[0-9]+/\1/g' 

測試:

kent$ echo "group_0 group_10 n_name_0 n_name_10 n_name_20 n_name_5 n_name_40 team_20 team_1"|sed -r 's/(n_name)_[0-9]+/\1/g' 
group_0 group_10 n_name n_name n_name n_name n_name team_20 team_1 

更新

我假設你想在你的shell腳本中使用該行。所以看下面的測試:

kent$ ls 
test.txt 

kent$ cat test.txt 
group_0 group_10 n_name_0 n_name_10 n_name_20 n_name_5 n_name_40 team_20 team_1 

kent$ commandSed=$(sed -r 's/(n_name)_[0-9]+/\1/g' test.txt > out.txt) 

kent$ ls 
out.txt test.txt 

kent$ cat out.txt 
group_0 group_10 n_name n_name n_name n_name n_name team_20 team_1 

其實commandSed var在這裏沒有任何意義。

如果你這樣做:

kent$ commandSed=$(sed -r 's/(n_name)_[0-9]+/\1/g' test.txt) 

(不重定向到新的文件)

kent$ echo $commandSed 
group_0 group_10 n_name n_name n_name n_name n_name team_20 team_1 

,如果你想擁有輸出在新的文件和commandSed變量都,發球是你的朋友:

kent$ commandSed=$(sed -r 's/(n_name)_[0-9]+/\1/g' test.txt|tee out.txt) 

kent$ echo $commandSed             
group_0 group_10 n_name n_name n_name n_name n_name team_20 team_1 

kent$ cat out.txt 
group_0 group_10 n_name n_name n_name n_name n_name team_20 team_1 
+0

的字符,請參閱編輯的問題。謝謝 – 2012-07-24 21:30:05

+0

@SantoshPillai查看更新回答 – Kent 2012-07-25 08:23:41

+0

group_0 group_10 team_20 team_1。這是我用你的腳本得到的輸出,似乎刪除了n_name。我正在運行$ commandSed =「sed -r's /(n_name)_ [0-9] +/\ 1/g'」。 $ userPath。 「的test.txt> out.txt」; system($ commandSed); – 2012-07-25 08:52:33