我有一个包含两个字段的文件。第一个字段可能包含也可能不包含整数。如果它包含一个整数并且一个点跟随整数,我想操纵第二个字段的一部分。所以作为一个例子:
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
由于我对正则表达式的知识非常有限,我无法做到。如果你能帮助我,我将非常感激。感谢
答案 0 :(得分:1)
请您尝试按照awk命令告诉我这是否对您有所帮助。 既然您还没有告诉我们哪个是您想要的第二列文本,以防需要更改,我只需要一个测试字符串。
awk
说明: $1
默认使用分隔符作为空格,因此$1 ~ /[0-9]+\./$
代表第1列。所以我在这里检查\.
这里,如果第一列中有数字,后面跟着一个DOT(ord
意味着我正在使用转义序列删除DOT的特殊情况这意味着,如果是,那么我在第二个字段中使用card
替换sub
,使用awk
的{{1}}(替换)实用程序。然后1
意味着我在这里做条件为TRUE而没有在这里提及并采取行动,所以默认情况下会发生动作打印。
答案 1 :(得分:0)
sed -E '/^[0-9]+\.[[:space:]]/!b;s/(^.*[[:space:]]+)([^[:space:]]*$)/\1Change this one/' infile