2016-03-10 3 views
-1

Я хочу удалить шаблон в начале каждой строки абзаца, который содержит слово1 в первой строке, и заканчивать словом 2, например, если у меня есть следующий файл, и я хочу subsitute --MW ничемКак удалить шаблон из начала строк между двумя словами с помощью sed или awk

--MW Word1 this is paragraph number 1 
--MW aaa 
--MW bbb 
--MW ccc 
--MW word2 

Я хочу, чтобы получить в результате:

Word1 this is paragraph number 1 
aaa 
bbb 
ccc 
word2 

заранее спасибо

+0

'начинается с word1' начинается с' --MW' ... – 123

ответ

2

Использование СЭД

sed '/Word1/,/word2/s/--MW //' file 

Использование AWK

awk '/Word1/,/word2/{sub(/--MW /,a)}1' file 

Оба действуют на линии между и в том числе совпавшие фразы и сделать замену на каждой строке. Они печатают все строки.

+1

Мне это нравится. Не знал о диапазоне. Спасибо, что поделился! –

+0

@ Component10 Да, ваше решение с использованием флагов, как правило, лучше, хотя и для любых, но тривиальных проблем. Это выглядит просто аккуратно для простых :) – 123

+0

@ 123 спасибо, что он работает – malmo

0

Если вы уверены, что погладить крачка будет в начале строки, то эта команда может помочь:

sed 's/^--MW //' file.txt 

Пожалуйста, проверьте и дайте нам знать, если это работало хорошо с вами.

+0

да, но эта команда редактирует весь файл. Я хочу изменить определенный абзац – malmo

+0

уверен, сек, я дам вам следующее исправление –

1

Если у вас есть текст в myfile.txt вы можете попробовать:

awk 'BEGIN{f=0}$2=="Word1"{f=1}{if (f==1) {$1="";print $0}else{print $0}}$2=="word2"{f=0}' myfile.txt 
+0

спасибо но он не удалял -MW с начала каждой строки – malmo

+0

'awk '$ 2 ==" Word1 "{f = 1} f == 1 {$ 1 =" "} $ 2 ==" word2 "{f = 0} 1'' – 123

+0

Странно. Прекрасно работает для меня. –

0

Будем надеяться, что это будет делать это для вас:

$ echo "--MW Word1 this is paragraph number 1" | cut -d ' ' -f 2- 

Где вы передаете текст, чтобы сократить команду и удалить первый маркер, используя пространство в качестве маркера сепаратора, сохраняя при этом остальные лексемы, то есть, от второй до конца.

Смежные вопросы