Удвойте каждое слово, которое содержит подстроку (скажем, «сделано»), но не саму подстроку - PullRequest
0 голосов
/ 29 ноября 2018
Example:
I have done my job well. i donett need any advice.
I have done my job well. I donett donett need any advice.

Это код, который я пробовал:

$ cat * | sed -E 's/\w*+done\w+*/& &/g'|  grep 'done'

Но этот код также считается выполненным как конечный результат.Мне нужно сделать это с помощью sed.

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

Или sed-решение, которое вы просили:

echo 'I have done my job well. i donett need any advice.' | sed -r 's/(\Wdone\w+|\w+done\w+|\w+done\W)/\1 \1/g; s/  / /g'
I have done my job well. i donett donett need any advice.
0 голосов
/ 29 ноября 2018

Я бы предложил использовать два выражения и объединить их с |

$ cat * | sed -E 's/\w+done\w*|\w*done\w+/& &/g'
I have done my job well. I donett donett need any advice.
0 голосов
/ 29 ноября 2018

Это можно легко сделать с помощью awk, если вы согласны с этим.

awk '{for(i=1;i<=NF;i++){if($i !~ /^done$/ && $i ~ /done/){$i=$i OFS $i}}} 1' Input_file

Вывод будет следующим.

I have done my job well. I donett donett need any advice.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...