2016-09-21 3 views
-3

Заменить очень близко строку в число с другой строкойЗаменить очень близко слово рядом с другим словом

a b c d a b c d e 23:12:00 k b c l d b d c e 12:02:10 

Как заменить первый д раньше времени (число) с другим характером f.it должен быть ниже

a b c d a b c f e 23:12:00 k b c l d b f c e 12:02:10 

ИЛИ

Как заменить ячейку с заголовком.

[[email protected] ~]$ grep -oP '(cell">)[0-2][0-9]+:[0-9]+:[0-9]+' test.html1 
cell">06:25:50 
cell">23:59:38 
cell">23:17:50 
cell">06:27:37 
cell">06:07:38 

она должна быть ниже

header ">06:25:50 
    header ">23:59:38 
    header ">23:17:50 
    header ">06:27:37 
    header ">06:07:38 
+0

Также, что такое правило? 'sed 's/d/f/2'' делает то, что вы запрашиваете, но, вероятно, не подходит в общем случае. – tripleee

+0

Два описания проблемы, разделенные ** OR **, совершенно разные. – anishsane

+0

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

ответ

1

После решения будет искать любое число, и если найден, он будет начать опрос назад искать d в строке и при обнаружении замените его b.

ввода пробы:

echo $x 
a b c d a b c d e 23:12:00 k b c l d b d c e 12:02:10 

Решение с использованием AWK:

echo $x |awk '{for(i=1;i<=NF;i++) if($i ~/[0-9]|-[0-9]/) for(j=i;j>=0;j--) if($j ~/d/) {gsub(/d/,"b",$j);break }}1' 
a b c d a b c b e 23:12:00 k b c l d b b c e 12:02:10 
+0

Спасибо. Работать отлично во всех случаях. если я хочу изменить ниже 20:00:00. Результат должен быть abcdabcde 23:12:00 kbcldbbce 12:02:10 –

+0

Даже когда он находится в -ve, например -39: 00: 00, Это должно быть изменение –

+1

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

1

Это может работать для вас (GNU СЭД):

sed -r 's/d([^d:]*([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])/f\1/g' file 

и

sed -r 's/cell(">([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9])/ header \1/' file 

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

+0

Спасибо Potong.It работает нормально. если я хочу изменить строки, которые имеют lessthan 24:00:00, Тогда как я могу дать ограничение –

+1

@SrinivasNallapati см. редактировать – potong

+0

Спасибо за ответ. Таким образом, мы не сможем изменить 19:00:00 по вашей команде, мы можем изменить 01,02,03, но не 04. Пожалуйста, предложите –

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