Zlokalizuj pozycję, a następnie wprowadź zmiany za pomocą sed


11

Ten skrypt używa sed do zmiany wszystkich „” na „nowe rzeczy”. Jak można zmienić tylko „” po yyy: używając sed lub cokolwiek innego?

cat >sample.txt <<EOF
xxx:
""
yyy:
""
}
EOF
sed --expression='s/""/"new stuff"/' sample.txt

Odpowiedzi:


8

Mogę nie zrozumieć twojego pytania. Jeśli chcesz zastąpić TYLKO wartość po „yyy”, użyj poprzedniej odpowiedzi. Jeśli chcesz zastąpić JAKIEKOLWIEK wartości po „yyy”, spróbuj tego jednowierszowego:

sed --expression='/yyy/,$ s/""/"new stuff"/g' sample.txt

Nie testowałem tego: D ...


3

Odpowiedź zebrana z O'Reilly - Sed & Awk 2. Dodatek Około strona 152

Napisz skrypt w pliku

/yyy\:$/{
N
s/yyy\:\n\"\"/yyy\:\
\"new stuff\"/
}

Zastosuj to do swoich danych w zwykły sposób

sed -f skrypt sample.txt

Ten skrypt mówi: szukaj yyy :. Po znalezieniu wczytaj kolejną linię do bufora wzorców (brzmi jak Star Trek Transporter). Teraz wykonaj polecenie / w połączonych liniach. Szukamy więc yyy: newline „”. Jeśli znaleziono, zamień na yyy: \ zauważ rzeczywisty ukośnik odwrotny, a następnie „nowe rzeczy”

Powodzenia


1
patrz strona podręcznika : unixhelp.ed.ac.uk/CGI/man-cgi?sed wyszukaj adres akapitu

1

Zauważyłem, że gdy sprawy staną się bardziej skomplikowane, przełączam się na Perla . s2p zajmie się tłumaczeniem twojego obecnego rozwiązania sed. Możesz też napisać go od podstaw w sposób trywialny. Wyszukanie / zamiana pozostanie takie samo.

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.