如何使用sed替换包含整数的行

时间:2017-10-02 15:38:42

标签: linux file sed

我有一个包含两个字段的文件。第一个字段可能包含也可能不包含整数。如果它包含一个整数并且一个点跟随整数,我想操纵第二个字段的一部分。所以作为一个例子:

301.    301+Num+Ord          # Change this one 301+Num+Card
100.    100+Num+Ord          # Change this one 100+Num+Card 
3'üncü  3+Num+Ord            # DONOT CHANGE THIS ONE
48.7    48.7+Num+Real        # DONOT CHANGE THIS ONE EITHER . is not at the end
24      24+Num+Card          # DONOT CHANGE THIS ONE No dot
4.      4+Num+Ord          #  Change this one 4+Num+Card
.        .+Punct              # DONOT CHANGE THIS ONE 

由于我对正则表达式的知识非常有限,我无法做到。如果你能帮助我,我将非常感激。感谢

2 个答案:

答案 0 :(得分:1)

请您尝试按照awk命令告诉我这是否对您有所帮助。 既然您还没有告诉我们哪个是您想要的第二列文本,以防需要更改,我只需要一个测试字符串。

awk

说明: $1默认使用分隔符作为空格,因此$1 ~ /[0-9]+\./$代表第1列。所以我在这里检查\.这里,如果第一列中有数字,后面跟着一个DOT(ord意味着我正在使用转义序列删除DOT的特殊情况这意味着,如果是,那么我在第二个字段中使用card替换sub,使用awk的{​​{1}}(替换)实用程序。然后1意味着我在这里做条件为TRUE而没有在这里提及并采取行动,所以默认情况下会发生动作打印。

答案 1 :(得分:0)

OP请求sed

sed -E '/^[0-9]+\.[[:space:]]/!b;s/(^.*[[:space:]]+)([^[:space:]]*$)/\1Change this one/' infile