我怎樣才能開展與下面的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後刪除一切
我怎樣才能開展與下面的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後刪除一切
sed -i 's:\(n_name\)_[[:digit:]]*:\1:g'
作品根據您輸入的數據:
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
的字符,請參閱編輯的問題。謝謝 – 2012-07-24 21:30:05
@SantoshPillai查看更新回答 – Kent 2012-07-25 08:23:41
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
解決方法很簡單。發現在http://www.unix.com/shell-programming-scripting/31583-wildcards-sed.html
$commandSed ="sed -r 's/n_name_[0-9]*/un_cell/g' test.txt>out.txt";
system($commandSed);
請參閱編輯的問題。謝謝 – 2012-07-24 21:29:49
我給了你一個詳細的答案。它對你有幫助嗎? – alinsoar 2012-07-24 21:40:54
group_0 group_10 team_20 team_1。我看到這個輸出。該字符串被替換爲類似於[] – 2012-07-24 22:33:59