Sed регулярное выражение последнее совпадение

Я хочу изменить в файле в каждой строке последнее совпадение с XXXX Учитывая формат файла:

"192.xx2" "someting" "another2321SD" 

Я хочу иметь:

"192.xx2" "someting" "XXXX" 

только с помощью sed Мое решение:

sed -r 's/"(?:.(?!".+"))+$/XXXX/' file
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
0
172
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Пожалуйста, имейте в виду, что

Чтобы замаскировать все содержимое между последней парой двойных кавычек, вы можете использовать

sed -r 's/(.*)".*"/\1"XXXX"/' file
sed 's/\(.*\)".*"/\1"XXXX"/' file

Смотрите демонстрацию sed:

s='"192.xx2" "someting" "another2321SD"'
sed -r 's/(.*)".*"/\1"XXXX"/' <<< "$s"
# => "192.xx2" "someting" "XXXX"

На stackoverflow.com/a/66778854/3220113 вы просите об улучшении. Я не знаю, лучше ли мои ответы, но вы также можете предположить, что " — это последний символ ввода: sed 's/"[^"]*"$/"XXXX"/' <<< "$s". Если вы не уверены (или когда с вас взимается плата за каждую двойную кавычку), вы можете использовать rev < <(sed -r 's/[^"]+/XXXX/' <( rev <<<"$s")). Хуже, кажется, awk -F '"' 'BEGIN { OFS = "\""} { $(NF-1) = "XXXX"; print }' <<< "$s".

Walter A 25.03.2021 00:11

@WalterA Спасибо, Уолтер. Предполагая, что последняя цитируемая часть действительно близка к концу строки, я думаю, что текущий подход уже должен быть достаточно хорошим. awk не рассматривал из-за вопросительных тегов, думаю тогда может быть еще много предположений.

Wiktor Stribiżew 25.03.2021 00:35

Вспомните, что было перед последней парой двойных кавычек в захвате.

sed -r 's/^(.*)"[^"]*"$/\1"XXXX"/'

Другие вопросы по теме