查找和替换字符并将其放在Shell中String的末尾

时间:2016-09-09 11:36:25

标签: shell sed

我有很多字符串,

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 -

2 个答案:

答案 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"

答案 1 :(得分: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