#regex #bash #sed
#регулярное выражение #bash #sed
Вопрос:
Я уже потратил много времени на sed и gsed, просто пытаясь сопоставить глупую строку, но это все еще не работает!
ни:
echo "123adv123" | sed -En 's/([a-z] )/#/g'
ни:
echo "123adv123" | sed -En 's/([a-z]*)/#/g'
ни:
echo "123adv123" | sed -En 's/([a-z] )/#/g'
ни:
echo "123adv123" | gsed -rn 's/([a-z] )/#/g'
ни:
echo "123adv123" | gsed -rn 's/([a-z] )/#/g'
Я пробую это на OSX. Я знаю, что вопрос выглядит действительно странным, но я застрял и просто хочу разобраться, что здесь не так?
Вывод должен быть 123#123
Комментарии:
1. Чего вы хотите достичь? Можете ли вы предоставить ожидаемый результат?
2. Вы никогда не печатаете пространство шаблона. Вы никогда не получите никаких выходных данных из этого. Отбросьте
n
аргумент. В качестве альтернативы, добавьтеp
послеg
, чтобы указать sed напечатать строку. Ваша последняя строка работает (сs/gsed/sed/
и удалениемn
аргумента) здесь, в CentOS Linux сGNU sed version 4.1.5
.3. Удалите
-n
(«noprint») аргумент или добавьтеp
(«print») в своюs
команду:s/a/b/gp
4. спасибо и извините за глупый вопрос, просто застрял с ним странным образом.
Ответ №1:
Вам нужно удалить -n
, иначе это приведет к подавлению вывода.
Это работает на OSX:
echo "123adv123" | sed 's/([a-z][a-z]*)/#/g'
Итак, это:
echo "123adv123" | gsed -r 's/([a-z] )/#/g'
Или это:
echo "123adv123" | sed -E 's/([a-z] )/#/g'
Или для печати только замененных строк используйте:
sed -nE 's/([a-z] )/#/pg' file
Комментарии:
1. Я думал, это для подавления несогласованных строк. Хорошо, если я удалю его, как я буду подавлять строки без сопоставления?
2. Вы можете использовать:
sed -nE 's/([a-z] )/#/pg' file