@
私は大きなファイルを持っていて、特定のしきい値より短い各行の前に文字を追加したいと思います。
たとえば、次のファイルがあるとします。
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文字以下の行では@
最初に印刷されます。
答え2
あなたはそれを使用することができますsed
:
# the threshold is the '5'
$ sed '/^.\{1,5\}$/s/^/@/' file
@dddd
weowfpdvkdfpomcwdf[wedifkw[efkwcwfpmcsdlvcdvdvdfvbdffvd
13148-089-42094vj2-393-8-08923r234234r232
@ssss
wvmigmfogvjjtgoprgfbkpgofkbgpfbokdfvdd
13012323432432-123421343-343432323-2322
答え3
使用アッ実行できるユーティリティは次のとおりです。
awk '/.{10}./||($0="@"$0)' file
ストリームエディタsed同じことができます。
sed -e '
s/./&/11;t
s/^/@/
' file
- プレフィックスをトリガーするしきい値は10文字以下です。