2014-11-24 2 views
-1

У меня есть следующие 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. затем удалите эти два символа.

Я пробовал некоторые решения без удовлетворительного результата.

+0

Почему downvote? – user3437460

+0

'удалить удалить два символа?? – user3437460

+0

Спасибо ... я исправил его :) – MLSC

ответ

2

Вы могли бы просто использовать СЭД, как показано ниже,

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. устанавливает поле Seperator как .

  • '/^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., будут иметь остальную линию в $2 и линии, которые не имеют b. при старте, будут иметь полную строку в $1. Таким образом, любой из $1 и $2 будет пустым, следовательно print $ 1 $ 2 prints the correct output i.e. line without b.` при запуске.
Смежные вопросы