Muszę zastąpić całą linię z sed
, jeśli pasuje do wzorca. Na przykład, jeśli wiersz jest "jeden dwa sześć trzy cztery" i jeśli "szóstka" tam jest, wówczas cała linia powinna zostać zastąpiona "usterką".sed zastąpić całą linię, gdy pasuje znaleźć
Odpowiedz
Można to zrobić z jednej z nich:
sed 's/.*six.*/fault/' file # check all lines
sed '/six/s/.*/fault/' file # matched lines -> then remove
Robi się cały wiersz zawierający six
i zastępuje go fault
.
Przykład:
$ cat file
six
asdf
one two six
one isix
boo
$ sed 's/.*six.*/fault/' file
fault
asdf
fault
fault
boo
Jest on oparty na this solution do Replace whole line containing a string using Sed
Bardziej ogólnie, można użyć wyrażenia sed '/match/s/.*/replacement/' file
. Spowoduje to wykonanie wyrażenia sed 's/match/replacement/'
w wierszach zawierających match
. W twoim przypadku będzie to:
sed '/six/s/.*/fault/' file
Co jeśli mamy „jeden dwa sześć osiem jedenaście trzy cztery” i chcemy zawierać „osiem” i „jedenaście” jako nasz „zły” słowa?
W tym przypadku możemy użyć -e
dla wielu warunków:
sed -e 's/.*six.*/fault/' -e 's/.*eight.*/fault/' file
i tak dalej.
Albo też:
sed '/eight/s/.*/XXXXX/; /eleven/s/.*/XXXX/' file
Co, jeśli mamy "jeden dwa sześć osiem jedenaście trzy cztery" i chcemy włączyć "osiem" i "jedenaście" jako nasze "złe" słowa? Czy s /.* sześć | osiem | jedenaście. */Usterka/g działa? – irek
Jest to możliwe z '-e', zobacz moją zaktualizowaną odpowiedź. – fedorqui
Dziękuję za poświęcony czas! – irek
To może pracować dla Ciebie (GNU sed):
sed -e '/six/{c\fault' -e ';d}' file
czyli
sed '/six/{c\fault'$'\n'';d}' file
Nad odpowiedziami działało w porządku dla mnie, po prostu wspomnieć alternatywny sposób:
M Atch pojedynczy wzorzec i zastąpić nowym:
sed -i '/six/c fault' file
meczów wielokrotnego wzór i wymienić na nowy (polecenia złączenie):
sed -i -e '/one/c fault' -e '/six/c fault' file
- 1. sed multiline zastąpić
- 2. sed zastąpić dokładny mecz
- 3. python zastąpić poprzednią linię
- 4. sed, aby zastąpić "_", "&", "$" z "\ _", "\", "\ $" odpowiednio
- 5. Jak ustawić składnię vim podświetlić całą linię?
- 6. Egrep/Sed: zwraca tylko dopasowanie do wyrażenia regularnego, a nie całą linię.
- 7. Emacs: wyrównanie tekstu, ale nie całą linię?
- 8. Upewnij się, że fgetcsv() odczytuje całą linię
- 9. diff ignorując wzorce w linii, ale nie całą linię
- 10. Jak usunąć całą linię, jeśli istnieje w niej słowo?
- 11. Jak usunąć linię, która pasuje do wzorca i linii za nim z sed?
- 12. QTextEdit usunąć całą linię w danej pozycji
- 13. Jak czytać całą linię od bash
- 14. Jak zastąpić miejsce przecinkiem za pomocą sed?
- 15. Użyj zawartości pliku, aby zastąpić ciąg znaków przy użyciu SED
- 16. zastąpić linię z wielu linii w pliku
- 17. Dlaczego * nie pasuje, gdy + robi?
- 18. "sed": Jak dodać nową linię po dopasowaniu ciągu + 2 linie
- 19. Zamień całą linię w pliku INI, używając Powershell
- 20. Wydrukuj tylko pasujące słowo, nie całą linię przez grep
- 21. Jak dopasować całą linię w Notepad ++ do wyszukiwania/zamiany?
- 22. Znajdź ciąg w pliku Txt, Usuń całą linię
- 23. sed wymienić literalne TAB
- 24. Jak zastąpić bez tworzenia pliku pośredniego w sed?
- 25. Zastąpić określone słowo między znakami za pomocą sed?
- 26. sed - skomentuj pasującą linię i x linie po niej
- 27. sed wstawia linię ze spacjami do konkretnej linii
- 28. Jak dodać nową linię za pomocą sed (Mac)
- 29. Bash: Jak mogę zastąpić ciąg przez nową linię w boksie osx?
- 30. znajdź pasujący tekst i zamień następną linię
Czy za 'grep -V'? – xato