62235


Linuxでファイル内の文字数が7以下の行を削除して、8文字以上だけにしたいのですが、調べてもどのコマンドを組み合わせて実行すればいいのか分かりません。

例  
a.txt

[code]

    aaaa
    aaaaaaaaa
    aaaaaaaa        
    aaaaaaaaaaaaaa
    aa
    
[/code]

↓  
a.txt

[code]

    aaaaaaaa
    aaaaaaaaaaaaaa
    
[/code]

こんな感じにしたいです。  
よろしくお願いします。


CC BY-SA 4.0
2020-01-14T08:51:17.983
62232
2020-01-15T01:11:17.777
2020-01-15T01:11:17.777
3060
30885
question
linux
Linuxで7文字以下の行をファイルから削除したい


説明と期待する結果が一致していないような気がしますが、行末の空白を `sed` で削除しつつ `awk` を使うと以下のようなワンライナーは如何でしょうか。

[code]

    $ cat a.txt | sed 's/\s*$//' | awk '{ if(length($0) >= 8){ print } }'
    
[/code]


CC BY-SA 4.0
2020-01-14T09:08:47.973
62234
2020-01-14T09:08:47.973
3060
62232
answer


空白を考慮せず、単純に7文字以下の行を削除する方法です。

[code]

    cat a.txt | sed '
    /^$/d
    /^.$/d
    /^..$/d
    /^...$/d
    /^....$/d
    /^.....$/d
    /^......$/d
    /^.......$/d
    '
    
[/code]

以下の記述を追加すれば、行末の空白を削除できます。

[code]

    s/[ ][ ]*$//
    
[/code]

* * *

ファイルを書き換える版です。exを使っています。

[code]

    ex a.txt <<EOF
    /^.......$/d
    /^......$/d
    /^.....$/d
    /^....$/d
    /^...$/d
    /^..$/d
    /^.$/d
    /^$/d
    x
    EOF
    
[/code]

以下の記述を追加すれば、行末の空白を削除できます。

[code]

     %s/[ ][ ]*$//
    
[/code]


CC BY-SA 4.0
2020-01-14T09:59:10.040
62235
2020-01-14T13:32:45.107
2020-01-14T13:32:45.107
35558
35558
62232
answer


たくさんあるよ。

## sed

[code]

    sed -ne '/.\{8\}/p' a.txt
    
[/code]

## perl

[code]

    perl -nle 'print if length > 7' a.txt
    
[/code]

## awk

[code]

    awk 'length > 7' a.txt
    
[/code]

## grep

[code]

    grep '.\{8\}' a.txt
    
[/code]


CC BY-SA 4.0
2020-01-14T10:41:01.847
62238
2020-01-14T10:41:01.847
62
62232
answer


**残す** ではなく **消す** というアプローチで書いてみました。

[code]

    $ grep -E -v '^.{0,7}$' a.txt
    aaaaaaaaa
    aaaaaaaa
    aaaaaaaaaaaaaa
    
    $ sed -E '/^.{0,7}$/d' a.txt
    aaaaaaaaa
    aaaaaaaa
    aaaaaaaaaaaaaa
    
[/code]


CC BY-SA 4.0
2020-01-14T23:22:39.293
62246
2020-01-14T23:22:39.293
34583
62232
answer