LINUX.ORG.RU

bash, sed, use $STRING

 , ,


0

1

добрый день/вечер/ночь!

взял пример с форума, немного рихтанул, сейчас делает то, что надо :о)

как доработать, под использование «строк», вместо «констант»?

#
STR1="str1"
STR2="str2.1 str2.3 str2.3"
#

скрипт

#!/bin/bash
set -e; clear

#
# STR1="str1"
# STR2="str2.1 str2.3 str2.3"
#

echo "#
#str1 - this remark line
str1 - this open line :o)
#" > text.txt

sed -i 's/\(^str1 \)\(.*\)\(.*\)/str2.1\ str2.2 \str2.3/' text.txt
cat text.txt
-->
#
#str1 - this remark line
str2.1 str2.2 str2.3
#

спасибо

p.s.

если не понятно, что делает скрипт:

1. создает файл 
2. "просматривает" файл, на наличие "искомой строки"
3. пропускает "ремарки", ищет "открытую строку" 
4. находит строку, начинающуюся с "str1"
5. заменяет всю строку на другую "str2..."

в примере для «поиска» и «замены» - используются «жестко прописанные строки/константы»

надо: «жестко прописанные строки/константы» заменить на строки (STR1 & STR2, в примере закомментированы)

если совсем не понятно, запустите скрипт... :o)

дерните за веревочку... озорение и прийдет :о)

★★★★

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

Так и доработай - используй в выражении замены переменные вместо строк. Только кавычки у седа используй двойные. Возможно, еще понадобится немного магии для экранирования всякой фигни в строках типа тех же точек.

Deleted
()
Ответ на: комментарий от Deleted

пробовал, не получилось, поэтому решил «понитересоваться», что скажут те, кто в этом разбирается

ну да, делов то :о)

!!! спасибо !!!

#!/bin/bash
set -e; clear

#
STR1="str1"
STR2="str2.1 str2.3 str2.3"
#

echo "#
#str1 - this remark line
str1 - this open line :o)
#" > text.txt

sed -i "s/\(^$STR1 \)\(.*\)\(.*\)/$STR2/" text.txt
cat text.txt
sunjob ★★★★
() автор топика
Ответ на: комментарий от sunjob

Есть разные костыли. Можно перловый quotemeta использовать например.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.