複数行を含むファイルがあります。 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/
与えられた正規表現(「次から始まる行」)と一致しますnnn
。 length
(またはlength($0)
)は入力ラインの長さを返します。式が一致し、長さが25以上の場合、その行は無視され、それ以外の場合は印刷されます。入力が長すぎると感じたら{ print }
。1
または、
awk '!/^nnn/ || length < 25' file
これは同じことを行いますが、反対の条件を使用します。行が式と一致しない場合、または25文字未満の場合は印刷されます。他の行は無視されます。
これら両方の製品
nnnASDDGfdgdsfn
sadbSADSDDFSDFrrrRRRRRRRttTGGGG
与えられた入力データについて。