linux
  • bash
  • shell
  • sed
  • 2013-11-22 32 views 3 likes 
    3

    我有一個XML文件,得到的只是數值,我想從我想出瞭解決方案的file.One字符串中提取只是數值如何從在bash字符串

    cat file.xml |grep -i "mu "| grep -o '[0-9]' 
    

    但我得到由新行分隔每個數字,例如100,我得到1個新行,然後0等on.The其他的解決方案,我想出了是

    cat file.xml |grep -i "mu "|cut -d ' ' -f 4| tr '=' ' '|cut -d ' ' -f2|tr '""' ' '|sed -e 's/^ *//g' -e 's/ *$//g' 
    

    我的問題:有沒有更簡單解決這個問題,我只是從一條線的數值而不關心字段,不使用cuttr命令?

    +0

    請提供您的字符串示例 – iruvar

    +0

    ''但它可以不同,例如值和'='符號之間可以有空格。 – rizvaughan

    回答

    4

    使用此egrep的:你有

    egrep -o '[0-9]+' 
    
    +1

    或者在上下文中'grep -i「mu」file.xml | grep -Eo'[0-9] +'' – tripleee

    +1

    謝謝你,shukria – rizvaughan

    0

    一種選擇是,刪除一切,是不是從你的輸入

    tr -cd '[:digit:]' 
    

    或爲浮點數

    tr -cd '[:digit:].'  
    
    +0

    謝謝,它對我有效,但對[[:digit:]不太舒服] – rizvaughan

    0

    我一個數字個人鼓勵避免將XML作爲格式;至少爲了你自己的用途。而不是 「<畝產值=」 100"/>」,你可以使用以下命令: -

    # Name your data file ma-me-mo-mu.txt 
    
    100+200+300+400 
    

    ,然後: -

    while IFS='+' read ma me mo mu 
    do 
    echo "${ma}" 
    echo "${me}"  
    echo "${mo}" 
    echo "${mu}" 
    done 
    

    你並不需要命名內的列數據文件本身。他們進入文件名。

    +0

    它是我正在開發的一個項目,不是我的選擇。 – rizvaughan

    相關問題