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 projdir
i 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. -i
Mówi sed
napisać 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-place
wówczas przykład będzie bardziej samowydajny.