LINUX.ORG.RU

Замена всей строки при обнаружении в ней подстроки

 


0

1

Как с помощью седа замениь всю строку на $VAR1, если в строке присутствует строка $VAR2?

VAR1="asas \n asasa"
VAR2="copy"

>cat ./file
write
write me once
read
read copy on write
why u do this
staph

After sed:
write
write me once
read
asas 
 asasa
why u do this
staph

Спасибо.

Вопрос вдогонку: насколько безопасно делать так:

>sed -r 's/hello/bye/g' in.file  > in.file

★★

Последнее исправление: sambist (всего исправлений: 2)

насколько безопасно делать так:

А ты пробовал?

terminator-101
()
Ответ на: комментарий от terminator-101

Это не будет гарантией того, что это будет работать на любом файле и при любых обстоятельствах.

sambist ★★
() автор топика

cat in.file|sed 's/hello/bye/g'>in.file

sed -ri 's/hello/bye/g' in.file
  -i[SUFFIX], --in-place[=SUFFIX]
                 edit files in place (makes backup if SUFFIX supplied)
AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 2)

Как с помощью седа замениь всю строку на $VAR1, если в строке присутствует строка $VAR2?

sed "/$VAR2/s/.*/$VAR1/"

как-то так. Только учти, что $VAR2 расценивается как регулярное выражение.

Если это не нужно, то лучше как-то так:

#!/bin/bash
while read $S; do
  if  [ "${S#*$VAR2*}" !=  "$S" ]; then
    echo "$VAR1" >>output
  else
    echo "$S" >>output
  fi
done < input

насколько безопасно делать так

ты написал нерабочую чушь. Используй sed -i

emulek
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.