ip后删除sed

时间:2018-07-03 13:41:46

标签: regex sed

我有一个简单的问题。

我有这样的数据:

boo:moo:127.0.0.1--¹óÖÝÊ¡µçÐÅ
foo:joo:127.0.0.1 ÁÉÄþÊ¡ÉòÑôÊвʺçÍø°É

我如何做到这一点:

boo:moo:127.0.0.1
foo:joo:127.0.0.1

我的sed代码

sed -e 's/\.[^\.]*$//' test.txt

谢谢!

2 个答案:

答案 0 :(得分:1)

对于给定的示例,您可以捕获从行首到行中最后一位的所有内容

<div>
  <p id='x'></p>
  <p id='y'></p>
  <p id='x2'></p>
  <p id='y2'></p>
  <p id='w'></p>
  <p id='h'></p>
  <br/>
  <button id='fix_label' onclick="fixLabel()">Fix Label Here</button>
</div>

<form action="" method="POST" id="canvas">
  <div id='img_area'>
    <img src="someImageFile.jpg" id="imageId" width="350" height="350" />
  </div>
  <div id='label_area'>
    <input type="submit" name="submit" value="Label" id='input'>
  </div>
  <div id='fix_label_area'></div>
</form>

或者,您可以删除行末所有非数字字符

$ sed 's/\(.*[0-9]\).*/\1/' ip.txt
boo:moo:127.0.0.1
foo:joo:127.0.0.1

$ grep -o '.*[0-9]' ip.txt
boo:moo:127.0.0.1
foo:joo:127.0.0.1

答案 1 :(得分:0)

您可能会找到类似子字符串的IP,然后将其删除:

sed -E 's/([0-9]{1,3}(\.[0-9]{1,3}){3}).*/\1/' # POSIX ERE version
sed 's/\([0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}\).*/\1/'  # BRE POSIX version

([0-9]{1,3}(\.[0-9]{1,3}){3})模式是简化的IP地址正则表达式模式,它匹配并捕获1到3位数字,然后匹配3个点,再匹配1到3位数字,然后.*匹配并使用其余部分。替换模式中的\1占位符会将捕获的值重新插入结果中。

请注意,在BRE POSIX模式中,必须转义()使其成为捕获组构造,并且需要转义{...}使其成为范围/间隔/ limiting量词(在正则表达式文献中有很多名称)。

查看online demo