/ / Używanie sed do zastąpienia wielu wystąpień w tym samym wierszu przed komentarzem - regex, bash, sed

Użycie sed do zastąpienia wielu instancji w tej samej linii przed komentarzem - regex, bash, sed

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 № 1

Moż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

RegEx Demo


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"