shell回文判断_shell脚本实现检测回文字符串

所有回文字的结构特征如下:

如果字符数是偶数,那么它在结构上表现为:一个字符序列连着另一个字符相同但次序恰好相反的字符序列。

如果字符数为奇数,那么它在结构上表现为:一个字符序列连着另一个字符相同但次序恰好相反的字符序列,但是这两个序列中间共享一个相同的字符。

sed命令能够记住之前匹配的子样式。可以用正则表达式:'\(.\)',匹配任意一个字符,\1表示其反向引用。如匹配有两个字符的回文正则表达式为:

'\(.\)\(.\)\2\1'

匹配任意长度的回文脚本如下所示:

#!/bin/bash

#file name: match_palindrome.sh

#function: find palindrome in a file.

if [ $# -ne 2 ]

then

echo "Usage: $0 filename string_length"

exit -1

fi

filename=$1

basepattern='/^\(.\)'

count=$(( $2/2 ))

# matche certain length

for ((i=1; i < $count; i++))

do

basepattern=$basepattern'\(.\)';

done

# the length is even

if [ $(( $2 % 2)) -ne 0 ]

then

basepattern=$basepattern'.';

fi

for ((count; count > 0; count--))

do

basepattern=$basepattern'\'"$count";

done

echo "debug: $basepattern"

# print the result

basepattern=$basepattern'$/p'

sed -n "$basepattern" $filename

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值