4

指定された数を超える文字を含むファイル内のすべての行を削除するにはどうすればよいですか?例えば

bear
rabbit
tree
elephant

5文字以下の単語に制限すると、出力は次のようになります。

bear
tree
  • ファイルにはさまざまな外国文字が含まれており、それぞれが1文字としてカウントされます。
  • 句読点記号も1文字として数えることができます。
4

4 に答える 4

19
$ awk 'length<=5' input.txt
bear
tree
于 2012-04-12T06:43:55.217 に答える
8

以下はトリックを行います:

sed -i '/^.\{5,\}$/d' FILE

これが意味することは次のとおりです。

次のパターンに一致するすべての行を削除 ( / [...] /d) インプレース ( switch) します。-i

  • 行頭 ( ^)
  • 任意の文字が続く ( .) 5 回以上繰り返される ( \{5,\})
  • $その後に行末 ( )が続きます

という名前のファイルからFILE

于 2012-04-12T06:42:54.890 に答える
4
grep -v '......' myfile.txt

は 5 文字以下の行を配信します。

これは、6 文字以上を含む行を「選択」してから、 でアクションを逆にして、一致しない-v行のみを出力することによって行われます。

于 2012-04-12T06:35:12.677 に答える
1

「ファイルにはさまざまな外国語の文字が含まれています。これらはそれぞれ 1 文字としてカウントされます。」入力データが UTF8 であると仮定すると、この bash フィルター スクリプトで実行できます。

#!/bin/bash
function px {
 local a="$@"
 local i=0
 while [ $i -lt ${#a}  ]
  do
   printf \\x${a:$i:2}
   i=$(($i+2))
  done
}
(iconv -f UTF8 -t UTF16 | od -x |  cut -b 9- | xargs -n 1) |
if read utf16header
then
 px $utf16header
 cnt=0
 out=''
 while read line
  do
   cnt=$(($cnt+1))
   if [ "$line" == "000a" ]
    then
     if [[ $cnt -le 5+1 ]] ; then
      out=$out$line
      px $out
     fi
     cnt=0
     out=''
   else
    out=$out$line
   fi
  done
fi | iconv -f UTF16 -t UTF8
于 2012-04-12T08:26:34.903 に答える