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
CW Holeman II
źródło

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 ...


źródło
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


źródło
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.

Brian Agnew
źródło