【问题标题】:Find and delete lines with multiple words in a text file查找和删除文本文件中包含多个单词的行
【发布时间】:2014-10-09 08:54:13
【问题描述】:

如果文本文件有多个单词,我如何制作一个 bash 脚本来删除行?

【问题讨论】:

  • 举个例子会更好。
  • “删除行”是什么意思?那么如果文件包含超过 1 个单词,删除什么?

标签: linux bash find


【解决方案1】:

也许是这样的:

#!/bin/bash

exec 3>output

while read -r line; do
  nwords=`echo $line | wc -w`;
  if [ ! "$nwords" -gt 1 ]; then
      echo "$line" >&3;
  fi

done < input

exec 3>&-

然后您将在输出文件中拥有不超过 word 的所有行,您可以删除输入文件而不是 mv 输出到输入。

【讨论】:

    【解决方案2】:

    我用过这个,使用sed:我的txt文件是file.txt:

    one
    one two
    one two tree for
    one two
    
    sed -i.bck '/\(.\+\)\(\s\+\)\(.*\)/d' file.txt
    cat file.txt
    one
    

    【讨论】:

    • 不知道是不是应该但是在这种情况下不起作用:一二\n(空格)二当开头有空格时
    【解决方案3】:

    如果您的单词由“空格”字符分隔,您可以使用 sed 在一行中完成。让“./myfile.txt”作为你的文件名,那么:

    #!/bin/bash
    
    sed -i "/[^ ][ ]/d" ./myfile.txt
    

    正则表达式替换前面有非空格字符的所有空格字符,当你有两个单词时就是这种情况。

    【讨论】:

      猜你喜欢
      • 2018-06-15
      • 2015-12-14
      • 1970-01-01
      • 1970-01-01
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多