Grep: wyszukaj i zamień pełną linię


13

Komenda

 grep "foo" myfile.txt

drukuje wszystkie pasujące linie w moim pliku.

Teraz chcę zastąpić pełną linię innym ciągiem. Jak mogę to zrobić?

Odpowiedzi:


13

Jeśli dopasowujesz podłańcuch całej linii, możesz użyć spolecenia sed z wyrażeniem regularnym, aby wycierać resztę linii:

sed -i 's/^.*foo.*$/another string/' myfile.txt

lub użyj cpolecenia, aby zastąpić dopasowaną linię za jednym razem:

sed -i '/foo/ { c \
another string
}' myfile.txt

Jeśli nie chcesz wpisywać poleceń wielowierszowych w wierszu polecenia, możesz zamiast tego umieścić je w skrypcie:

$ cat foo.sed
/foo/ { c \
another string
}

$ sed -i -f foo.sed myfile.txt

dzięki! kiedy używam drugiej opcji, otrzymuję: sed: -e wyrażenie # 1, char 0: niedopasowane `{'
zacisk

na końcu pierwszego wiersza musisz wpisać \, a następnie nacisnąć Return - ważne jest, aby \ uciekł od pierwszej nowej linii. Następnie upewnij się, że }'jest na osobnej linii od another string: zamiennik jest wszystkim w drugiej linii, w tym }jeśli umieścisz ją tam.
Bezużyteczne

-1

Możesz użyć wbudowanej funkcji sed :

sed -i -e 's/foo/bar/' myfile.txt

To zastąpi tylko każdą fooz barnie całą linią.
Jahid
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.