LINUX.ORG.RU

Что разве в sed нет комбинации невходящих элементов?

 


0

1

Чет бред какой то. Не могу догнать. Вот типо список для примера

abc001
bbc000
acb010
bbb011
bdf021
ddf160
sdf154

Как седом или чем то другим но лучше седом, потому что у меня там дальше он же используется в скрипте, заменить последние две цифры только если последняя цифра не 1 и предпроследняя не 0??? То есть чтоб оба условия И а не ИЛИ. Если делаю так sed 's/[^0][^1]$/22/' то меняется как то по странному

abc001
bbc000
acb022
bbb011
bdf021
ddf122
sdf122

По идее должны были замениться все строки кроме первой. Но не изменились. Где я затупил м? Как это исключение в [^] превратить в И? Так тоже не работает [^(01)]$

По идее должны были замениться все строки кроме первой.

Это у вас что-то странно с логикой. Ну возьмем второе, там два нуля на конце, то есть условию, что на предпоследнем месте не ноль - не удовлетворяет.

vodz ★★★★★
()
Ответ на: комментарий от vodz

Ну так вообще для этого есть | вот эта палка. Тогда то как у меня щас получается должно явно выходить из такого выражения

sed -r 's/[^(0|1)]$/22/'

Как правильно то исключать комбинацию тогда? В мане конечно написано что в [] списки, поэтому я и сначала разделил 0 и 1 на разные списки но это тоже не работает. Че не так то?

Linux_Newbie
() автор топика
Ответ на: комментарий от Linux_Newbie

Че не так то?

Внутри [ ] всё - обычные символы кроме ^ в начале и - между ну и сами [ ]. «Палка» для целых выражений: /[^0][^1]$|[^`][^0]$/

vodz ★★★★★
()
Ответ на: комментарий от vodz

Ну понятно. Значит пихать все выражение в одни скобки не имеет смысла. Как тогда организвать логическое и между двумя такими списками? Или такого механизма нет?

Linux_Newbie
() автор топика
Ответ на: комментарий от Linux_Newbie

Как тогда организвать логическое и между двумя такими списками? Или такого механизма нет?

Вы, похоже, просто тормозите, надо отвлечься. Логическое И и есть само выражение: «должно быть вот такой символ и такой и такой». И уже между ними можно ИЛИ «|»

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz

То что я туплю мы уже определили. Вот мне и надо стукнуть для просветления. Если логичиское и по умолчанию, раз нет логического или в виде палки тогда почему [^0][^1]$ которое по моему имху должно читаться как предпоследний символ не ноль И последний символ не единица так седом не воспринимается?

Получается сед читает паттерн посимвольно. Видит что я указываю сначала не ноль. Начинает проходится по строке. Если попадается ноль то дальше он и не проверяет на предмет не единицы, а сразу скипает цикл проверки на следующую строку. Так? Тогда как мне его заставить в случае ТРУ при проверке на не ноль все равно проверять на не единицу? То есть проверять одновременно на несовпадение двух последних символов вместе.

Linux_Newbie
() автор топика
Последнее исправление: Linux_Newbie (всего исправлений: 1)
Ответ на: комментарий от Linux_Newbie

И последний символ не единица так седом не воспринимается?

Ну со второй строкой уже понятно или нет? Если нет - то дальше разговор не имеет смысла, оставьте до завтра.

попадается ноль то дальше он и не проверяет

Не надо выдумывать странные логики. Она явная: если выражение не удовлетворяет, значить не нашли.

vodz ★★★★★
()
Ответ на: комментарий от Elyas

Да это работает но эт не интересно. Я пытаюсь допереть как оно там работает внутрях. Видимо водз прав и уровень тупняка за день превысил норму. Ушел спать крч.

Linux_Newbie
() автор топика
Ответ на: комментарий от Elyas

Вероятно то, что ты хочешь, пишется так:

Ему хочется

sed -E 's/[^0]1$|0[^1]$|[^0][^1]$/22/'
Только тссс...

vodz ★★★★★
()

заменить последние две цифры только если последняя цифра не 1 и предпроследняя не 0 По идее должны были замениться все строки кроме первой.

Т.е. ты вот серьёзно в жизни говоришь «не чёрное и не квадратное» (красный квадрат не подходит, например) и при этом подразумеваешь «всё кроме одновременно чёрного и квадратного» (тут уже красный квадрат подходит)?

fulmar_lor
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.