2014-11-24 62 views
-1

我有以下file.txt的:sed的删除前两个字符,如果一些字符串存在

b.howareyou 
hello 
goodbye 
b.hello 
howareyou 
b.goodbye 
b.test 
testb. 
testb.test 

我想下面的输出:

howareyou 
hello 
goodbye 
hello 
howareyou 
goodbye 
test 
testb. 
testb.test 

我要检查,如果前两个字符b.然后删除这两个字符。

我试过一些解决方案没有满意的结果。

+0

为什么downvote? – user3437460 2014-11-24 06:19:49

+0

'删除两个字符'? – user3437460 2014-11-24 06:36:11

+0

谢谢......我纠正了它:) – MLSC 2014-11-24 07:36:16

回答

2

你可以简单地用sed像下面,

sed 's/^b\.//' file 

说明:

  • ^断言,我们是在开始。
  • b匹配文字b
  • \.匹配一个字面点。
  • 用空字符串替换匹配的字符将为您提供所需的输出。
1

Awk解决方案可以像

$ awk -F. '/^b./{$0=$2} 1' input 
howareyou 
hello 
goodbye 
hello 
howareyou 
goodbye 
test 
testb. 
testb.test 

它能做什么?

  • -F.设置字段分隔符为.

  • '/^b./{$0=$2}如果符合b.开始,设置记录$0$2后面的.

  • 1真正为每一行,需要打印整个记录的默认动作,$0

1

这AWK应该工作:

awk -F '^b\.' '{print $1$2}' file 
howareyou 
hello 
goodbye 
hello 
howareyou 
goodbye 
test 
testb. 
testb.test 
  • 这AWK是使用字段分隔符作为^b\.这意味着仅b在线起始随后点。
  • 线与b.开始将线的休息$2并没有b.在一开始将有充分的线$1线。因此$1$2之一将为空,因此print $ 1 $ 2 prints the correct output i.e. line without b.`在开始时。