2015-11-01 2 views
0

Я хотел бы определить, является ли строка палиндром или нет.
Допустим, что у меня есть файл, как это:
abcccba
abcccccccccccccccccccccccba

alfabetaalfa

Я хотел бы, чтобы проверить каждую строку этого файла и сказать «палиндром» каждый раз, когда строка является палиндромом. Проблема в том, что я не могу использовать сопоставление типа ([0-9]) ([0-9])/2/1, потому что я не знаю, как долго будет слово. Я думаю, что я должен каким-то образом создать модель.

Поиск StackOverflow найти некоторые намеки, я нашел это: СЭД -r 'h;s/[^[:alpha:]]//g;H;x;s/\n/&&/;ta;:a;s/\n(.)\n(.)/\n\2\1\n/;ta;G;/\n(.)\n\n\1$/I;d' $1

Проблема в том, что он точно не работает, как и должно быть, и я понятия не имею, как использовать его для печати конкретные слова, как " ПАЛИНДРОМ "или" НЕ ПАЛИНДРОМ ".Найти палиндром без петель с помощью sed

Большое вам спасибо за помощь.

EDIT: конечно, «не используя петли», я имею в виду общие петли. Прыгать на этикетки - все в порядке.

+1

, что случилось с петлями? – amdixon

+0

Дело в том, что я хотел бы сделать это только с командой sed. Если у него есть ярлыки, почему бы не использовать их? И, как вы можете видеть в фрагменте кода, который я опубликовал, это возможно, но я не уверен, как он работает, или если это другое решение, подобное этому. – Angela

ответ

2

Вы не должны использовать СЭД:

xxx="rrrtttrrr" 

if [ $xxx == `echo $xxx| rev` ]; then 
    echo "PALINDROME" 
else 
    echo "NOT A PALINDROME" 
fi 

Sed версия может быть найдена here:

#! /bin/sed -f 
# Laurent Le Brun <laurent [at] le-brun.eu> - 2007 

:loop 
s/^\(.\)\(.*\)\1$/\2/ 
t loop 
/...*/ { 
    i\ 
no 
    b end 
} 
i\ 
yes 

:end 
d 
+0

Я нашел это решение и в стеке. Но он не использует sed. Я отправил свой вопрос, потому что хочу сделать это с помощью sed, потому что я бы хотел его изучить. – Angela

+0

Вы ищете что-то в этом роде - http://laurent.le-brun.eu/pub/palindrome.sed Нет петель, только лейблов. –

Смежные вопросы