РЕДАКТИРОВАТЬ: Похоже, что другие решения позаботятся только о замене пробела на 1-й пробел после .
, после чего позаботятся о всех пробелах.
awk 'match($0,/[^.]*/){val=substr($0,RSTART+RLENGTH);gsub(/ /,"_",val);print substr($0,RSTART,RLENGTH) val;next} 1' Input_file
00:00 07:45 01._Alva
07:45 14:40 02._White_Cliffs
14:40 20:22 03._Ribcage_#1
20:22 25:04 04._I_am_Oidipus
Если вы пытаетесь набрать sed
, вам может помочь следующее.Вам не нужно использовать несколько команд sed
.
sed -E 's/\. +/\._/' Input_file
00:00 07:45 01._Alva
07:45 14:40 02._White Cliffs
14:40 20:22 03._Ribcage #1
20:22 25:04 04._I am Oidipus
Измените sed -E 's/\. +/\._/'
на sed -E 's/\. +/\._/g'
выше, если у вас есть несколько вхождений .
(пробелы) в строке.
Если вы в порядке с awk
, не могли бы вы, пожалуйста, попробовать следующее.
awk '{sub(/\. +/,"._")} 1' Input_file
Если у вас есть несколько случаев .
, тогда замените sub
на gsub
в вышеуказанной команде.Вывод будет следующим:
00:00 07:45 01._Alva
07:45 14:40 02._White Cliffs
14:40 20:22 03._Ribcage #1
20:22 25:04 04._I am Oidipus
Протестированный выше код с несколькими пробелами: Допустим, у нас есть несколько пробелов после .
, тогда также будет работать код aboe,Предполагая, что ваш Input_file выглядит следующим образом.
cat Input_file
00:00 07:45 01. Alva
07:45 14:40 02. White Cliffs
14:40 20:22 03. Ribcage #1
20:22 25:04 04. I am Oidipus
Здесь я изменил последнюю строку, добавив больше пробелов после .
, теперь после выполнения кода он заменит их на один _
следующим образом.
awk '{sub(/\. +/,"._")} 1' Input_file
00:00 07:45 01._Alva
07:45 14:40 02._White Cliffs
14:40 20:22 03._Ribcage #1
20:22 25:04 04._I am Oidipus