2016-09-09 32 views
-1

字符串我有很多串狀的結束,查找和替換的字符,並把它放到殼牌

DATA/PARAMETER.OUTPUT -40.0000 (Number will be variable) 

我想這個字符串轉換成轉換,

DATA/PARAMETER.OUTTPUT 40.0000- (Even though its 2/3/4/6 digit number). 

我嘗試下面的代碼

sed -n 's/-/$-/gp' input.txt > output.txt 

但無法正常工作。它不考慮$作爲行尾,而是用$ - 取代。

我只想把-40.000減號結束40.0000-

+0

你實際上是試圖在第一列中刪除字符串「字符串」,或者是評論?我不認爲你的輸入實際上包含了文本'(數字將是變量)',所以你應該從你的示例輸入中取出該評論。 –

+0

DATA/PARAMETER.OUTPUT -40.0000 to DATA/PARAMETER.OUTPUT 40.0000- – user1543571

+0

目前還不清楚如何在算法上將Number變量轉換爲即使其2/3/4/6數字編號。要麼解釋該轉換,要麼從您的樣本輸入/輸出中刪除該文本。 –

回答

0
awk '{split($NF,a,"-");$NF=a[2] "-" ;print $0}' filename 

例子:

x="string DATA/PARAMETER.OUTPUT -40.0000" 
echo $x 
string DATA/PARAMETER.OUTPUT -40.0000 
echo $x |awk '{split($NF,a,"-");$NF=a[2] "-" ;print $0}' 
string DATA/PARAMETER.OUTPUT 40.0000- 

要更改保留在原始文件:

awk '{split($NF,a,"-");$NF=a[2] "-" ;print $0}' filename > filename.tmp && mv filename.tmp filename 
+0

不適合我。 :| – user1543571

+0

我很抱歉它沒有。我相信您在這裏和您的真實文本中提供的示例文本會有所不同,因爲它可以很好地處理您提供的示例輸入。 –

3

你可能會使用反向引用:

$ sed 's/-\([0-9].*\)/\1-/' <<< "string DATA/PARAMETER.OUTPUT -40.0000" 
string DATA/PARAMETER.OUTPUT 40.0000- 

爲了確保-先於數字的組合的.

sed 's/-\([0-9\.]*\)/\1-/' <<< "string DATA/PARAMETER.OUTPUT -40.0000" 
+0

謝謝,正是我正在尋找......爲... – user1543571