如果存在某些字符串,则删除前两个字符

时间:2014-11-24 06:12:28

标签: bash awk sed

我有以下file.txt:

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.,然后删除这两个字符。

我尝试了一些没有令人满意的结果的解决方案。

3 个答案:

答案 0 :(得分:2)

你可以简单地使用下面的sed,

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

<强>解释

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

答案 1 :(得分: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每行都为true,采用默认操作打印整条记录,$0

答案 2 :(得分: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。在开始时。