sedには2つの条件があります

sedには2つの条件があります

複数行を含むファイルがあります。 25文字で始まり、25文字を超える
ファイルから項目を削除したいと思います。nnn

現在は2つだけ作成できますsed

sed '/^nnn/d' input.txt > output.txt
sed '/^.\{25\}./d' input.txt > output.txt

しかし、それは私の目標ではありません。

入力例:

nnnASDDGfdgdsfndsjfndsjfdfgGHGHGhfhfd
nnnASDDGfdgdsfn
sadbSADSDDFSDFrrrRRRRRRRttTGGGG

希望の出力:

nnnASDDGfdgdsfn
sadbSADSDDFSDFrrrRRRRRRRttTGGGG

ベストアンサー1

これは次の方法で行うのが最善ですawk

awk '/^nnn/ && length >= 25 { next } { print }' file

/^nnn/与えられた正規表現(「次から始まる行」)と一致しますnnnlength(またはlength($0))は入力ラインの長さを返します。式が一致し、長さが25以上の場合、その行は無視され、それ以外の場合は印刷されます。入力が長すぎると感じたら{ print }1

または、

awk '!/^nnn/ || length < 25' file

これは同じことを行いますが、反対の条件を使用します。行が式と一致しない場合、または25文字未満の場合は印刷されます。他の行は無視されます。

これら両方の製品

nnnASDDGfdgdsfn
sadbSADSDDFSDFrrrRRRRRRRttTGGGG

与えられた入力データについて。

おすすめ記事