заменить последнее слово в конкретной строке sed

У меня есть файл, подобный

abc dog      1.0
abc cat      2.4
abc elephant 1.2

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

abc dog      1.0
abc cat      2.4
abc elephant mystring

У меня есть sed '/.*elephant.*/s/%/%/' $file, но что должно быть вместо «%»?

РЕДАКТИРОВАТЬ: странный пример

abc dogdogdogdog      1.0
abc cat               2.4
abc elephant          1.2

и теперь попробуйте изменить последнюю строку.

1
задан 06.03.2019, 02:41

3 ответа

альтернатива для замены и сохранения места:

awk '/elephant/{sub(".{"length($NF)"}$","new")}7' file

с вашим примером:

kent$ cat f
abc dog         1.0
abc cat         2.4
abc elephant    1.2

kent$ awk '/elephant/{sub(".{"length($NF)"}$","new")}7' f
abc dog         1.0
abc cat         2.4
abc elephant    new
0
ответ дан 14.05.2019, 11:35
  • 1
    Хорошо я попробовал его и это doesn' t действительно работают очень хорошо. Это складывается condition ? baudRate<256000>() : baudRate<9600>(), недопустимо даже при том, что обе специализации происходят из того же базового класса. Так игнорируйте этот бит. – n.m. 19.03.2019, 09:36

базовый

sed '/elephant/ s/[^[:blank:]]\{1,\}$/mstring/' $file

, если в конце может быть некоторое пространство

sed '/elephant/ s/[^[:blank:]]\{1,\}[[:blank:]*$/mystring/' $file
0
ответ дан 14.05.2019, 11:35

РЕДАКТИРОВАТЬ: Чтобы сохранить пробелы, попробуйте следующее.

awk '
match([110],/elephant[^0-9]*/){
  val=substr([110],RSTART,RLENGTH-1)
  sub("elephant","",val)
  $NF=val "my_string"
  val=""
}
1
'  Input_file


Не могли бы вы попробовать следовать (если вы в порядке с awk).

awk '/elephant/{$NF="my_string"} 1' Input_file

Если вы хотите сохранить вывод в сам файл Input_file, попробуйте выполнить следующее.

awk '/elephant/{$NF="my_string"} 1' Input_file > temp_file && mv temp_file Input_file
0
ответ дан 14.05.2019, 11:35

Теги

Похожие вопросы