Знайдіть позицію, а потім внесіть зміни за допомогою sed


11

Цей скрипт використовує sed, щоб змінити всі "" на "нові речі". Як можна змінити лише "" після yyy: використовуючи sed або щось інше?

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

Відповіді:


8

Я не можу зрозуміти ваше запитання. Якщо ви хочете замінити ТІЛЬКО значення після "yyy", скористайтеся попередньою відповіддю. Якщо ви хочете замінити БУДЬ-які значення після "yyy", спробуйте цей одношаровий:

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

Не перевірив: D ...


3

Відповідь зібрана з O'Reilly - Sed & Awk 2nd Addition На всьому стор. 152

Запишіть сценарій у файл

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

Застосовуйте це до своїх даних звичайним

sed -f скрипт sample.txt

Цей сценарій говорить шукайте yyy:. Коли знайдете, прочитайте інший рядок у буфері шаблону (звучить як Star Trek Transporter). Тепер виконайте як / командуйте в об'єднаних рядках. Тож ми шукаємо yyy: newline "". Якщо знайдено замінити на yyy: \ помітити зворотній косою рисою фактичний новий рядок, то "новий матеріал"

Удачі


1
див. сторінку чоловіка: unixhelp.ed.ac.uk/CGI/man-cgi?sed пошук абзацу за адресою

1

Коли я виявляю, що речі виходять за межі певного рівня складності, я переходжу на перл . s2p буде обробляти переклад поточного рішення sed. Або ви могли б написати це з нуля тривіально. Вираз пошуку / заміни залишиться колишнім.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.