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