BASH从一个单词中删除特定的标记

时间:2017-12-24 18:01:13

标签: bash

我试图找到给定文件中最长的单词。在我检查每个单词的长度之前,我需要删除所有可能附加(一次或多次)单词的以下标记{,。:}。例如,对于这个文本:

  

:,猫狗,百科全书;删除:

我需要结果:

  

猫狗百科全书删除

我正在尝试这个,但是我收到了“未找到命令”:

longest=0
for word in $(<$1)
do
    #new_word = $(echo "${word//[.,:]/}")
    new_word = "${word//[.,:]/}"
    len=${#new_word}

    if (( len > longest ))
    then
        longest=$len
        longword=$new_word
    fi
done
echo The longest word is $longword and its length is $longest.
谢谢。

1 个答案:

答案 0 :(得分:0)

您使用参数扩展替换模式是正确的。

问题是在=(通常是任何shell)中声明变量时,bash周围不能有任何空格。

因此,以下内容应该有效:

new_word="${word//[.,:]/}"

顺便说一句,使用while read ...构造来循环文件中的行,使用for非常脆弱。