使用sed查找没有循环的回文
Find palindrome without loops using sed
我想确定一个字符串是否为回文。
假设我有这样的文件:
abcccba
abccccccccccccccccccccccba
alfabetaalfa
我想检查这个文件的每一行并说 "PALINDROME" 每一行都是回文。问题是我不能使用像 ([0-9])([0-9])/2/1 这样的匹配,因为我不知道这个词有多长。我认为我应该以某种方式进行模式缓冲。
搜索计算器以找到一些提示,我发现了这个:
sed -r 'h;s/[^[:alpha:]]//g;H;x;s/\n/&&/;ta;:a;s/\n(.<em>)\n(.)/\n\n/;ta;G;/\n(.</em>)\n\n$/I;d' $1
问题是它不能完全正常工作,我不知道如何使用它来打印特定的单词,例如 "PALINDROME" 或 "NOT A PALINDROME".
非常感谢您的帮助。
编辑:当然 "not using loops" 我指的是普通循环。跳转到标签没问题。
你不必使用 sed:
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/^\(.\)\(.*\)$//
t loop
/...*/ {
i\
no
b end
}
i\
yes
:end
d
我想确定一个字符串是否为回文。
假设我有这样的文件:
abcccba
abccccccccccccccccccccccba
alfabetaalfa
我想检查这个文件的每一行并说 "PALINDROME" 每一行都是回文。问题是我不能使用像 ([0-9])([0-9])/2/1 这样的匹配,因为我不知道这个词有多长。我认为我应该以某种方式进行模式缓冲。
搜索计算器以找到一些提示,我发现了这个:
sed -r 'h;s/[^[:alpha:]]//g;H;x;s/\n/&&/;ta;:a;s/\n(.<em>)\n(.)/\n\n/;ta;G;/\n(.</em>)\n\n$/I;d' $1
问题是它不能完全正常工作,我不知道如何使用它来打印特定的单词,例如 "PALINDROME" 或 "NOT A PALINDROME".
非常感谢您的帮助。
编辑:当然 "not using loops" 我指的是普通循环。跳转到标签没问题。
你不必使用 sed:
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/^\(.\)\(.*\)$//
t loop
/...*/ {
i\
no
b end
}
i\
yes
:end
d