Bash 打印文本文件中的所有回文

Bash 打印文本文件中的所有回文,bash,palindrome,Bash,Palindrome,我看了这个问题:。这是问题答案从该线索中显示的内容: grep -E '^[a-z]{3,45}$' /usr/share/dict/words | while read -r word; do [ $word == `echo $word | rev` ] && echo $word; done; 我知道这是从“单词”中读取,但在尝试将其修改为从文本文件而不是/usr/share/dict/words中读取时遇到困难。我想让它读取我请求的任何文本文件,这样我就可以:

我看了这个问题:。这是问题答案从该线索中显示的内容:

grep -E '^[a-z]{3,45}$' /usr/share/dict/words | while read -r word;
    do [ $word == `echo $word | rev` ] && echo $word;
done;
我知道这是从“单词”中读取,但在尝试将其修改为从文本文件而不是
/usr/share/dict/words
中读取时遇到困难。我想让它读取我请求的任何文本文件,这样我就可以:

source palindrome *filename*
这将打印出控制台中文件中的回文。以后也可以使用它,以便输出到输出文件:

source palindrome *filename* >> output.txt
我已经尝试过这样做,但它不起作用,我真的不确定我必须更改什么才能让它读取我的文件:

#!usr/bin/bash

function search
{
    filename=$1

    grep -E '^[a-z]{3,45}$' "$filename" | while read -r word;
        do [ $word == `echo $word | rev` ] && echo $word;
    done;
}
search $1
如果给出任何解决方案,它们是否可以采用类似的格式?我还没有学会太多其他的技巧。如果给出更复杂的解决方案,请您解释一下给出的代码


输入文件来自一本电子书,它非常长,所以一个小片段是:(我意识到这并没有显示片段中的回文,但它只是显示它是什么类型的文本文件)


运行源回文文件名时,没有错误消息。我按下回车键,终端允许我再次输入任何我想输入的内容。它看起来不像是在脚本中运行的

您的shebang行是错误的。更改:

#!usr/bin/bash

#/bin/bash
函数搜索
{
grep-oiE'[a-z]{3,}'$@“| tr'[:upper:''[:lower:''”|而read-r word;do
[$word==$(rev这个怎么样(没有脚本):


comm-12“它不工作”这不是一个问题描述。你有错误消息吗?如果你只是将结果转储到一个文件中,为什么你需要源代码bash代码?定义为常规bash/sh脚本不是更好吗?Cristian Ramon Cortes-我想首先将它输出到终端,这样我就可以检查它是否按预期工作,然后我将它输出到一个文件erwards@Jhonathan,这可以用awk一行完成(只需澄清最小字号)
$*
部分是无意义的。为什么
$*
是无意义的?当他调用
源回文*文件名*
$*时,可以通过
一个文件名1
另一个文件名2
…来展开,
文件名=$*;grep-E'^[a-z]{3,45}$'“$filename”
?只需几个问题:1:使用“$@”所以它可以接受多个文件,在我的$1代码中,这意味着它需要一个文件?2:带“{3,}”部分,这是否意味着它只接受3个或更多长度的单词而不是我的代码,而不是3-45个字符长的单词。1:没错,
$1
意味着它只需要一个文件。2:它现在接受长度不限的单词,而不是将其限制为45个字符。3-infinity比3-45更好。
#!usr/bin/bash
#!/usr/bin/bash
#!/bin/bash
#!/bin/bash

function search
{
    grep -oiE '[a-z]{3,}' "$@" | tr '[:upper:]' '[:lower:]' | while read -r word; do
        [[ $word == $(rev <<< "$word") ]] && echo "$word"
    done
}

search "$@"
comm -12 <(nl foo) <(rev foo | nl) | cut -f2