在bash脚本中需要字符串操作的帮助

时间:2016-11-30 04:47:23

标签: bash substring string-length

我不习惯使用bash脚本的语法。我试图读取文件。对于每一行,我只想在分隔符' /'之前保留字符串的一部分。如果单词尊重特定长度,则将其放回新文件中。我已下载字典,但格式不符合我的期望。由于有84000个单词,我真的不想手工删除' /'之后的内容。对于每个单词。我虽然这很容易,但我在这个网站上的其他类似问题中也有一些想法,但似乎我在某个地方遗漏了某些东西,因为它仍然没有用。我无法确定正确的长度。文件Test_Input每行包含一个单词。这是代码:

#!/usr/bin/bash
filename="Test_Input.txt"
while read -r line
do
    sub= echo $line | cut -d '/' -f1
    length= echo ${#sub}
    if $length >= 4 && $length <= 10;
        then echo $sub >> Test_Output.txt
    fi
done < "$filename"

2 个答案:

答案 0 :(得分:0)

有几个项目:

  1. 我假设你在作业中一直使用单引号,而不是字面sub= echo $line | cut -d '/' -f1,因为这肯定会失败。或者,您也可以使用sub=$(),如$(echo $line | cut -d '/' -f1)
  2. if条款中的条件需要包含在单个或双[]中,如下所示:if [[ $length -ge 4 ]] && [[ $length -le 10 ]];
  3. 这让我想到了下一点:<=在bash中无法可靠地工作。只需使用-ge代替&#34;大于或等于&#34;和-le for&#34; less or equal&#34;。
  4. 如果您的专线不包含任何/字符,则您的版本sub将包含整行。这可能不是您想要的,因此我建议您还将-s标记添加到cut
  5. 您不需要somevar=$(echo $someothervar)。只需使用somevar=$someothervar
  6. 即可

    这是一个有效的版本:

    #!/usr/bin/env bash
    filename="Test_Input.txt"
    while read -r line
    do
        sub=$(echo $line | cut -s -d '/' -f 1)
        length=${#sub}
        if [[ $length -ge 4 ]] && [[ $length -le 10 ]];
            then echo $sub >> Test_Output.txt
        fi
    done < "$filename"
    

    当然,您也可以使用sed

    sed -n -r '/^[^/]{4,10}\// s;/.*$;;p' Test_Input.txt > Test_Output.txt
    

    说明:

    • -n除非明确标记为打印,否则不要打印任何内容。
    • -r使用扩展的正则表达式
    • /<searchterm>/ <operation>搜索符合特定条件的行,然后执行以下操作:
      • Searchterm是:^[^/]{4,10}\/从行的开头,应该有4到10个非斜杠字符,后跟斜杠
      • 操作是:s;/.*$;;p用任何东西替换第一个斜杠和行尾之间的所有内容,然后打印。

答案 1 :(得分:0)

<select class="selectpicker" data-live-search="true" id="company" data-size="5" title="Dove Sei?" data-width="100%"> <option data-tokens="Dove sei?" value="Dove Sei?" id="Dove Sei?" selected>Dove sei?</option> <option data-tokens="another" id="another" value="another" data-picture="another.png">another</option> <option data-tokens="another" id="another" value="another" data-picture="another.png">another</option> <option data-tokens="another" id="another" value="another" data-picture="another.png">another</option> </select> <ul class="list-group" style="text-align: center;"> <li class="list-group-item" style="border-style: none;"><h4>Servizio</h4> <div class="btn-group"> <button id="buttonSurvey" type="submit" class="btn btn-default" data-toggle="modal" data-target="#voteReg" name="survey1" value="green" onclick="getVote(this.value)" style="border: none;"><img src="Q1.png}" class="Vote"></button> <button id="buttonSurvey" type="submit" class="btn btn-default" data-toggle="modal" data-target="#voteReg" name="survey1" value="green" onclick="getVote(this.value)" style="border: none;"><img src="Q2.png}" class="Vote"></button> </div></li>是此

的最佳工具

awk