Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: globaluty в Nov 26, 2015, 15:42



Титла: Заместване на string чрез sed
Публикувано от: globaluty в Nov 26, 2015, 15:42
Здравейте, изпитвам затруднения с използването на sed. Имам файл със следното съдържание:

Код:
hello
helloasd
hello2
word1
word2

Опитвам се да изтрия последните 2 реда чрез следната команда:

sed 'N; s/word1\nword2.*//' filename

Или пък да ги заменя с други 2 реда:

sed 'N; s/word1\nword2/word2\nword1/' filename

Нищо не се случва  :'(

Използвах този пример, който пък работи: http://superuser.com/questions/634844/multi-line-sed-replace

Някакви идеи къде бъркам?


Титла: Re: Заместване на string чрез sed
Публикувано от: tdonev в Nov 26, 2015, 16:27
След sed сложи '-i' и ще стане.


Титла: Re: Заместване на string чрез sed
Публикувано от: globaluty в Nov 26, 2015, 16:35
Без -i изписва output-a какво ще стане след изпълнение на командата, без да променя в действителност файла.

Пробвах все пак, но не става.


Титла: Re: Заместване на string чрез sed
Публикувано от: tdonev в Nov 26, 2015, 16:58
Погледни примера който ти давам. :)
Код:
$ echo "НЕ СТАВА" >> тест.txt
$ cat тест.txt
НЕ СТАВА
$ sed -i 's/НЕ СТАВА/СТАВА/g' тест.txt
$ cat тест.txt
СТАВА


Титла: Re: Заместване на string чрез sed
Публикувано от: globaluty в Nov 26, 2015, 17:02
Така работи. Както виждаш обаче, аз се опитвам да заменя 2 реда, а не само 1 стринг от целия документ  :) Това че съм ползвал word1 и word2 е просто, за да е по-нагледно.


Титла: Re: Заместване на string чрез sed
Публикувано от: tdonev в Nov 26, 2015, 17:11
Беше пример, ето ти още един :)

Код:
$ cat тест.txt 
hello
helloasd
hello2
word1
word2
$ sed -i -e 's/word1/WORD1-CHANGE/' -e 's/word2/WORD2-CHANGE/' тест.txt
$ cat тест.txt
hello
helloasd
hello2
WORD1-CHANGE
WORD2-CHANGE
$


Титла: Re: Заместване на string чрез sed
Публикувано от: globaluty в Nov 26, 2015, 17:15
Идеята ми е да замества конкретно нещо. Защото ще имам следното във файла:

cd /home/user/app1
#./run.sh

cd /home/user/app2
#./run.sh

и още така надолу..

Искам да променя само на app1 от #./run.sh на ./run.sh :)


Титла: Re: Заместване на string чрез sed
Публикувано от: korea60 в Nov 26, 2015, 21:27
Ако съм ви разбрал правилно това би трябвало да помогне:

cat proba.txt | sed '/app1/{n;s/#//}'


Титла: Re: Заместване на string чрез sed
Публикувано от: globaluty в Nov 26, 2015, 23:47
Ако съм ви разбрал правилно това би трябвало да помогне:

cat proba.txt | sed '/app1/{n;s/#//}'

Върши работа, а после как мога да го върна знака?


Титла: Re: Заместване на string чрез sed
Публикувано от: korea60 в Nov 27, 2015, 10:18
Единият вариант е да позлваш sed така:
-i.bak , така ще се създаде копие на файла с разширение .bak (за евентуално връзщане на старият файл),
нямам възможност за тест в момента и не искам да те подвеждам, затова предлагам само горното.


cat proba.txt | sed '/app1/{n;s/^/#/}' - Би трябвало да работи.