Mam plik o nazwie .ignore. W razie potrzeby wymienić projdir. Na przykład:
ignore \..*
ignore README
projdir Snake
Muszę zastąpić Snake'a na przykład „PacMan”. Czytam stronę podręcznika, ale nie mam pojęcia, co robić.
Mam plik o nazwie .ignore. W razie potrzeby wymienić projdir. Na przykład:
ignore \..*
ignore README
projdir Snake
Muszę zastąpić Snake'a na przykład „PacMan”. Czytam stronę podręcznika, ale nie mam pojęcia, co robić.
Odpowiedzi:
Wyszukaj wiersz zaczynający się od projdiri zamień cały wiersz na nowy:
sed -i 's/^projdir .*$/projdir PacMan/' .ignore
^i $są znacznikami początku / końca linii, więc wzór będzie pasował do całej linii; .*pasuje do wszystkiego. -iMówi sednapisać bezpośrednio do zmian .ignore, a nie tylko ich wyprowadzania
Jednym z podejść jest przepisanie całej linii przy użyciu odwołań wstecznych dla części, które chcesz zachować:
sed -e 's/^\( *projdir *\)[^ ]*\(.*\)*$/\1PacMan\2/'
Innym podejściem jest przepisanie tej części linii, ale tylko wtedy, gdy jakaś inna część pasuje:
sed -e '/^ *projdir / s/ [^# ]/ PacMan/'
Oba przykłady przepisują drugie słowo rozdzielane spacjami w wierszach, w których znajduje się pierwsze słowo projdir.
Chociaż jest to stary post i wydaje się, że została rozwiązana przez zaakceptowaną odpowiedź, faktyczne pytanie nie zostało udzielone. Aby uzyskać kompletność i pomóc innym:
Tutaj odpowiedź, która faktycznie pasuje do „Węża”, a nie do linii zaczynających się na „projdir” ...
sed -r 's/(^.*)Snake/\1PacMan' .ignore
Zastępuje to wszystko od początku linii, w tym „Snake” wszystko przed „Snake” + „PacMan”. \ 1 oznacza to, co jest dopasowane w środku (). Wszystko po „Wężu” pozostaje nietknięte.
sed -i 's:^projdir.*$:projdir PacMan:g' .ignore
^ projdir to znalezienie linii zaczynającej się od łańcucha projdir. Tam. * $ Oznacza ciąg po projdir w linii tej samej linii. Ciąg projdir PacMan to ciąg, który zastępujemy. g jest dla globalnego - aby zastąpić wszystkie takie linie zaczynające się od projdir. .ignore to nazwa pliku
-i, która jest,--in-placewówczas przykład będzie bardziej samowydajny.