Как сделать sed
с использованием переменной с escape-символами?с использованием sed с escape-символами в переменной
Это мой файл:
$ cat file1.txt
abcdefg
<p class="text-muted">© 2014. Core Team</p>
some more text
<p class="text-muted">© 2014. Core Team</p>
some more text
</head>
Я пытаюсь WITE следующей команды (whcih работает в командной строке с помощью экранирующего символа)
$ sed 's/<p class="text-muted">© 2014. Core Team<\/p>/99999/g' file1.txt
abcdefg
99999
some more text
99999
some more text
</head>
в сценарии с использованием переменных, но escape-символы или другие становятся лучше меня:
Это моя попытка моего сценария, где я могу получить grep
для работы с использованием переменной, но я не могу получить sed
работать. Может кто-нибудь мне помочь?
#!/bin/bash
###
# this is the text i want to find
# <p class="text-muted">© 2014. Core Team</p>
# and this is the text I want to replace depending on the year
# <p class="text-muted">© 2015. Core Team</p>
echo "hello this is a script to find a string and replace it with a string"
#s1='<p class="text-muted">© 2014. Core Team</p>' without escape characters
s1='<p class="text-muted">© 2014. Core Team</p>'
s2='<p class="text-muted">© 2015. Core Team</p>'
echo "s1="
echo "$s1"
echo "s2="
echo "$s2"
echo -e "\n\n\n\n\n\n\----------------\n\n\n\n\n\---------------"
grep "$s1" file1.txt #> file2.txt
sed 's/$s1/123/g' file1.txt #> file2.txt
#cat file2.txt
echo -e "\n\n\n\n\n\n\----------------\n\n\n\n\n\---------------"
----------- Edit1 ниже дальнейшего объяснения и/или для моей ссылки -----------------
Это файл, я хочу, чтобы СЭД на:
$ cat file1.txt
abcdefg
123
<p class="text-muted">© 2014. Core Team</p>
some more text
<p class="text-muted">© 2014. Core Team</p>
some more text
</head>
это мой сценарий
$ cat insertText2.sh
#!/bin/bash
###
# this is the text i want to find
# <p class="text-muted">© 2014. Core Team</p>
# and this is the text I want to replace depending on the year
# <p class="text-muted">© 2015. Core Team</p>
echo "hello this is a script to find a string and replace it with a string"
#s1='<p class="text-muted">© 2014. Core Team</p>' without escape characters
s1='<p class="text-muted">© 2014. Core Team</p>'
s2='<p class="text-muted">© 2015. Core Team</p>'
echo "s1="
echo "$s1"
echo "s2="
echo "$s2"
echo -e "\n\n-------grep on file1.txt--\n\n---------------"
grep "$s1" file1.txt #> file2.txt
echo -e "\n\n-------cat on file1.txt--\n\n---------------"
cat file1.txt
echo -e "\n\n-------sed on file1.txt--\n\n---------------"
#sed "s/$s1/123/g" file1.txt #> file2.txt
#sed "s|$s1|123|g" file1.txt #> file2.txt
sed "s|$s1|$s2|g" file1.txt #> file2.txt
#sed 's/123/ABC/g' file1.txt #> file2.txt
#cat file2.txt
это выход моего сценария
$ ./insertText2.sh file1.txt
hello this is a script to find a string and replace it with a string
s1=
<p class="text-muted">© 2014. Core Team</p>
s2=
<p class="text-muted">© 2015. Core Team</p>
-------grep on file1.txt--
---------------
<p class="text-muted">© 2014. Core Team</p>
<p class="text-muted">© 2014. Core Team</p>
-------cat on file1.txt--
---------------
abcdefg
123
<p class="text-muted">© 2014. Core Team</p>
some more text
<p class="text-muted">© 2014. Core Team</p>
some more text
</head>
-------sed on file1.txt--
---------------
abcdefg
123
<p class="text-muted"><p class="text-muted">© 2014. Core Team</p>copy; 2015. Core Team</p>
some more text
<p class="text-muted"><p class="text-muted">© 2014. Core Team</p>copy; 2015. Core Team</p>
some more text
</head>
, но это не делает то, что я хочу, это замена
<p class="text-muted">© 2014. Core Team</p>
с
<p class="text-muted"><p class="text-muted">© 2014. Core Team</p>copy; 2015. Core Team</p>
так возможно это что-то делать с моими спасательными персонажами?
Используйте двойные кавычки для расширения переменных: 'sed 's/$ s1/123/g" ' – anubhava
^^ Плюс, так как ваши шаблоны, скорее всего, будут tain '/', вам нужно будет использовать другой разделитель (например, '|') для sed: например. 'sed 's | $ s1 | 123 | g" ' – anishsane
Полезно знать. Я использовал одиночные кавычки '' ', поскольку у меня есть двойные кавычки' '' в моей переменной. И я попытался использовать '|', но это не полностью работает – HattrickNZ