しきい値より短いすべての行に文字列を追加します。

しきい値より短いすべての行に文字列を追加します。

@私は大きなファイルを持っていて、特定のしきい値より短い各行の前に文字を追加したいと思います。

たとえば、次のファイルがあるとします。

dddd
weowfpdvkdfpomcwdf[wedifkw[efkwcwfpmcsdlvcdvdvdfvbdffvd
13148-089-42094vj2-393-8-08923r234234r232
ssss
wvmigmfogvjjtgoprgfbkpgofkbgpfbokdfvdd
13012323432432-123421343-343432323-2322

長さが10文字以下のすべての行を修正したいと思います。その後、出力は次のようになります。

@dddd
weowfpdvkdfpomcwdf[wedifkw[efkwcwfpmcsdlvcdvdvdfvbdffvd
13148-089-42094vj2-393-8-08923r234234r232
@ssss
wvmigmfogvjjtgoprgfbkpgofkbgpfbokdfvdd
13012323432432-123421343-343432323-2322

ベストアンサー1

しきい値が「10文字以下」であると仮定すると、使用できます。

sed '/^.\{1,10\}$/s/^/@/' input.txt 

これは、アドレス指定子を使用して/^.\{1,10\}$/1〜10文字を含む行のみを処理し、「行の開始」をに「置き換えます」@

または@terdonが指摘したように:

sed 's/^\{1,10\}$/@&/' input.txt

これにより、1〜10文字を含むすべての行がに変わり、@その後に「それ自体」( &)。このアプローチには処理する正規表現のみが含まれているため、おそらく(少し)速くなります。

以下も使用できますawk

awk 'length($0)<=10 {printf "@"}1' input.txt 

これにより、ほとんどの行がそのまま印刷されますが、10文字以下の行では@最初に印刷されます。

おすすめ記事