2015-11-01 48 views
0

我想確定一個字符串是否是迴文。
比方說,我有文件是這樣的:
abcccba
abcccccccccccccccccccccccba

alfabetaalfa

我想檢查該文件的每一行,並說「迴文」每次行是一個迴文。問題是我不能像([0-9])([0-9])/ 2/1那樣使用匹配,因爲我不知道這個單詞會有多長。我認爲我應該模式緩衝。

搜索計算器找到一些線索,我發現這一點: 的sed -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

的問題是,它不正是因爲它應該工作,我不知道如何使用它來打印,如「特定詞PALINDROME「或」不是PALINDROME「。使用sed找到沒有循環的迴文

非常感謝您的幫助。

編輯:當然通過「不使用循環」我的意思是共同的循環。跳到標籤是可以的。

+1

什麼錯循環? – amdixon

+0

關鍵是我想只用sed命令來做。如果它有標籤,爲什麼不使用它們?正如你可以在我發佈的代碼片段中看到的,這是可能的,但我不確定它是如何工作的,或者如果它是這樣的其他解決方案。 – Angela

回答

2

您不必使用SED:

xxx="rrrtttrrr" 

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

桑達版本可以發現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 沒有循環,只是標籤。 –