2014-11-24 46 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.`在開始時。
相關問題