Próbuję użyć seda do zastąpienia wszystkich instancjipolecenia ze zmienną, spodziewaj się, kiedy pojawią się po komentarzu lub będą częścią innego słowa. Jestem blisko, będąc w stanie zastąpić jedną instancję przed komentarzem, ale nie, jeśli jest więcej niż jedna.
Mam plik testowy z linią:
rm rm # rm
Chcę, żeby to przeczytało:
$RM $RM # rm
Oto, co do tej pory miałem:
sed -i "s/(^|[^[#.*]])brmb/1$RM/" file1
Która zwraca:
$RM rm # rm
Każda pomoc jest mile widziana. Inne rozwiązania nie wymagające seda są mile widziane, ale mogę potrzebować pomocy w ich zrozumieniu.
Dzięki!
EDYTOWAĆ:
To tylko przykład tego, czego szukam.Nie każda linia będzie sformatowana w ten sposób i nie każda linia będzie zawierać polecenie przed komentarzem i odwrotnie. Szukam tylko rozwiązania, które obejmie również sytuację podobną do tego przykładu. Przepraszam za brak wyjaśnienia. Oto nieco lepszy przykład:
"$#" #rm
# rm
rm # rm
rm
"rm "
"rm "
`rm `
{rm }
$# rm # rm
rm rm # rm
rm # rm rm
rmremovermlink
Wynik powinien być:
"$#" #rm
# rm
$RM # rm
$RM
"$RM "
"$RM "
`$RM `
{$RM }
$# $RM # rm
$RM $RM # rm
$RM # rm rm
rmremovermlink
Odpowiedzi:
0 dla odpowiedzi № 1Możesz tego użyć perl
polecenie dla tego podstawienia:
perl -pe "s/(?<!$)#.*$(*SKIP)(*F)|brmb/$RM/g" file
"$#" #rm
# rm
$RM # rm
$RM
"$RM "
"$RM "
`$RM `
{$RM }
$# $RM # rm
$RM $RM # rm
$RM # rm rm
rmremovermlink
0 dla odpowiedzi nr 2
$[A-Z]{2}s$[A-Z]{2}s#s[a-z]{2}
Daj mi znać, jeśli tego szukasz. Pasuje do:
$RM $RM # rm
0 dla odpowiedzi № 3
Możesz użyć tej komendy sed:
sed ":a;s/^([^#]*)<rm>/1$RM/;ta;" file
# ^ ^ ^ ^ ^ ^ ^---- go to label "a" is something is replaced
# | | | | | "---- back-reference to capture group 1
# | | | "---"---- word boundaries
# | | "---- capture group 1
# | "---- replacement (only one occurrence)
# "---- defines the label "a"