使用sed和awk编辑文件中的行

时间:2017-10-11 20:02:06

标签: regex linux bash awk sed

我有一个由空格分隔的几个主机名的文件,然后是一个位置。

host1 C1U5  
host2 C11U55  
host15 C5U10

我必须编辑主机文件。我写了sed / awk行来删除字符但是我的sed行只返回整行。我需要删除该行的Cxx部分。

awk '{print $2}' file | sed -e 's/([Cc][0-9].\\w+//g' | tee new new_file

输出应该看起来像

host1 5  
host2 55  
host15 10

5 个答案:

答案 0 :(得分:2)

这将删除第二个字段中除最后一个数字之外的所有数字,您应该得到所需的输出。

{{1}}

输出:

{{1}}

答案 1 :(得分:2)

awk 解决方案:

myFunc

解释正则表达式:

$ awk '{sub(/C[0-9]+[^0-9]+/,"",$2)}1' file
host1 5
host2 55
host15 10

sed 解决方案:您可以使用相同的正则表达式

C              # C
[0-9]+         # followed by 1 or more digits
[^0-9]+        # followed by 1 or more non-digits

答案 2 :(得分:1)

Sed解决方案:

ubuntu$ sed -E 's/.*(^[a-zA-Z0-9]+[ ])([C][0-9]*[U])([0-9]+).*/\1 \3/g' mytext.txt
host1  5
host2  55
host15  10

问候!

答案 3 :(得分:1)

关注awk也可以帮助你。

awk -F'C[0-9]+\\w' '{print $1,$2}'  Input_file

输出如下。

host1  5
host2  55
host15  10

答案 4 :(得分:-1)

awk '{sub(/C.*U/,"")}1' file

host1 5  
host2 55  
host15 10

会发生什么?

sub删除两个正斜杠之间的所有内容。

来自C和。=任何值的单个字符

* =前面的字符为零或更多。

,“”=这里sub擦除正斜杠之间的内容。

在结尾处1打印剩下的内容。