亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 5433 | 回復: 14
打印 上一主題 下一主題

[文本處理] 求助用sed或awk進行文件替換 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2014-04-16 16:47 |只看該作者 |倒序瀏覽
5可用積分
輸入:
參數(shù)1: Insufficient free space in the %s  directory. The free space is only %s. At least %s is required.
參數(shù)2: /export/home
參數(shù)3: 5%
參數(shù)4: 20%

輸出: Insufficient free space in the /export/home directory. The free space is only 5%. At least 20% is required.

簡單描述:
給出一個源串,如:Insufficient free space in the %s  directory. The free space is only %s. At least %s is required.
把其中%s替換為指定的字符串,如:/export/home,  5%, %20
可以保證%s出現(xiàn)的個數(shù)與指定要替換的字符串個數(shù)相同, 但指定要替換的字符串個數(shù)是不定的,同時要替換的字符串內(nèi)容也不定。

本想用awk接收外部參數(shù)(指定要替換的字符串), 然后以%s作為分隔符,在每個域后面加上指定的字符串,但不知道如何將不定參數(shù)傳入到awk中。

也考慮過用sed循環(huán)替換其中的%s, 但是由于 指定的參數(shù)內(nèi)容不確定,可能就包括了sed指定的分隔符。

有沒有較好的替換方式,求大神指點。

最佳答案

查看完整內(nèi)容

回復 1# legone2008

論壇徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉雞
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥豬
日期:2014-04-22 16:13:09獅子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53處女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
2 [報告]
發(fā)表于 2014-04-16 16:47 |只看該作者
本帖最后由 Herowinter 于 2014-04-16 17:54 編輯

回復 1# legone2008
  1. #!/bin/bash

  2. s=$1
  3. for((i=2;i<=$#;i++));do
  4.     s=$(awk -vt=${!i} '{sub("%s",t);print}'<<<$s)
  5. done
  6. echo -e "\n****After repalcement****\n"
  7. echo $s
復制代碼
  1. ./print.sh "Insufficient free space in the %s  directory. The free space is only %s. At least %s is required." "/export/#home" "5%" "20%"

  2. ****After repalcement****

  3. Insufficient free space in the /export/#home directory. The free space is only 5%. At least 20% is required.
復制代碼

論壇徽章:
6
摩羯座
日期:2013-12-27 09:45:04技術(shù)圖書徽章
日期:2014-01-27 12:40:06辰龍
日期:2014-02-28 15:12:52巳蛇
日期:2014-03-21 17:06:27未羊
日期:2014-04-15 20:12:41黑曼巴
日期:2016-08-02 11:00:06
3 [報告]
發(fā)表于 2014-04-16 16:50 |只看該作者
回復 1# legone2008


    printf "Insufficient free space in the %s  directory. The free space is only %s. At least %s is required." /export/home 5% 20%

論壇徽章:
8
技術(shù)圖書徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
4 [報告]
發(fā)表于 2014-04-16 17:04 |只看該作者
  1. => awk -va='/export/home' -vb='5%' -vc='20%' 'BEGIN{print  "Insufficient free space in the "a" directory. The free space is only "b". At least "c" is required."}'
  2. Insufficient free space in the /export/home directory. The free space is only 5%. At least 20% is required.
復制代碼
可以嗎?

論壇徽章:
23
15-16賽季CBA聯(lián)賽之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午馬
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16賽季CBA聯(lián)賽之山東
日期:2017-12-21 16:39:1915-16賽季CBA聯(lián)賽之廣東
日期:2016-01-19 13:33:372015亞冠之山東魯能
日期:2015-10-13 09:39:062015亞冠之西悉尼流浪者
日期:2015-09-21 08:27:57
5 [報告]
發(fā)表于 2014-04-16 17:13 |只看該作者
回復 1# legone2008

try:
  1. $ cat test.sh
  2. #! /bin/bash

  3. n=1
  4. for i in "$@"
  5. do
  6.         if [ $n -eq 1 ]
  7.         then
  8.                 str=$i
  9.         else
  10.                 str=$(echo $str | sed "s#%s#$i#")
  11.         fi

  12.         let n=n+1
  13. done
  14. echo $str
  15. $
  16. $ test.sh 'Insufficient free space in the %s  directory. The free space is only %s. At least %s is required.' /export/home 5% 20%
  17. Insufficient free space in the /export/home directory. The free space is only 5%. At least 20% is required.
復制代碼

論壇徽章:
0
6 [報告]
發(fā)表于 2014-04-16 17:27 |只看該作者
樓上幾位都沒有認真看要求。
@2樓,3樓: 參數(shù)個數(shù)不定,參數(shù)值不定  
@4樓: 如果參數(shù)中包含#,sed就會出錯, 如:/export/#home

論壇徽章:
6
摩羯座
日期:2013-12-27 09:45:04技術(shù)圖書徽章
日期:2014-01-27 12:40:06辰龍
日期:2014-02-28 15:12:52巳蛇
日期:2014-03-21 17:06:27未羊
日期:2014-04-15 20:12:41黑曼巴
日期:2016-08-02 11:00:06
7 [報告]
發(fā)表于 2014-04-16 17:30 |只看該作者
回復 5# legone2008


    參數(shù)個數(shù)定不定有關(guān)系嗎?參數(shù)數(shù)量與%s數(shù)量一致就足夠了,有多少寫多少

論壇徽章:
23
15-16賽季CBA聯(lián)賽之吉林
日期:2017-12-21 16:39:27白羊座
日期:2014-10-27 11:14:37申猴
日期:2014-10-23 08:36:23金牛座
日期:2014-09-30 08:26:49午馬
日期:2014-09-29 09:40:16射手座
日期:2014-11-25 08:56:112015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:0315-16賽季CBA聯(lián)賽之山東
日期:2017-12-21 16:39:1915-16賽季CBA聯(lián)賽之廣東
日期:2016-01-19 13:33:372015亞冠之山東魯能
日期:2015-10-13 09:39:062015亞冠之西悉尼流浪者
日期:2015-09-21 08:27:57
8 [報告]
發(fā)表于 2014-04-17 08:31 |只看該作者
回復 5# legone2008


用2樓的方法吧,最簡單:
  1. $ cat test.sh
  2. #! /bin/bash

  3. str=printf
  4. for i in "$@"
  5. do
  6.         str="$str '$i'"
  7. done
  8. eval $str
  9. $
  10. $ test.sh 'Insufficient free space in the %s  directory. The free space is only %s. At least %s is required.' /export/home 5% 20%
  11. Insufficient free space in the /export/home directory. The free space is only 5%. At least 20% is required.
復制代碼

論壇徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉雞
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥豬
日期:2014-04-22 16:13:09獅子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53處女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
9 [報告]
發(fā)表于 2014-04-17 09:50 |只看該作者
回復 8# ly5066113
學習了,sed或awk確實繞彎了,
應該直接printf的。


   

論壇徽章:
6
處女座
日期:2014-04-02 16:07:17酉雞
日期:2014-04-14 10:09:22子鼠
日期:2014-04-17 11:57:30辰龍
日期:2014-09-01 17:14:08戌狗
日期:2014-10-28 12:25:54未羊
日期:2014-11-14 11:31:58
10 [報告]
發(fā)表于 2014-04-17 11:06 |只看該作者
  1. #!/bin/sh
  2. [ "$1" == "" ] && echo "$1 is Null" && exit

  3. [ `echo $(($#-1))` != `echo $1 | egrep -o "%s" | wc -l` ] && echo "\%s the wrong number!" && exit

  4. eval echo $(echo $1 | awk '{for(i=1;i<='`echo $[$#-1]`';i++){sub(/%s/,"$"i+1)}}1')
復制代碼
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP