私はgrepに最初に触れて、次のことをする方法を知りたいです。この形式の約1000行を含むファイルがあります。
assign ( resid 105 and name CB ) ( resid 105 and name CA ) 4.1 0.8 0.8
assign ( resid 44 and name CB ) ( resid 44 and name CA ) 4.4 0.9 0.9
最後の数字を次のように変更したいと思います。
4.6 2.6 2.6 !
私ができる方法はありますか?各行の数字は異なります。すべての数字を一貫して作成し、各行の末尾に「!」を追加しようとしています。
よろしくお願いします!
答え1
grep
一致を印刷し、ファイルのデータを印刷するために使用されます。データを交換するには、次のものが必要ですsed
。
sed 's|[0-9]\..*$|4.6 2.6 2.6 !|g' file
4.6 2.6 2.6 !
これにより、数字が何であるかに関係なく、各行の末尾にあるすべての数字が置き換えられます。
ファイルをその場で編集するには:
sed -i 's|[0-9]\..*$|4.6 2.6 2.6 !|g' file
出力:
assign ( resid 105 and name CB ) ( resid 105 and name CA ) 4.6 2.6 2.6 !
assign ( resid 44 and name CB ) ( resid 44 and name CA ) 4.6 2.6 2.6 !
答え2
今回はawk
テキスト処理のためのもう一つのソリューションです。
awk '{gsub(/([[:digit:]]\.[[:digit:]] ?){3}$/,"4.6 2.6 2.6 !")}1' file
.
これは、(また)行末の三重「数字」「数字」(および可能であれば空白)パターンをユーザが指定した文字列に置き換える。
出力(再)
assign ( resid 105 and name CB ) ( resid 105 and name CA ) 4.6 2.6 2.6 !
assign ( resid 44 and name CB ) ( resid 44 and name CA ) 4.6 2.6 2.6 !
使用される構文は完全に移植可能ではありません。mawk
たとえば、繰り返し計算の構成がわからないため、次のように使用する必要があります。{number}
awk '{gsub(/[0-9]\.[0-9] [0-9]\.[0-9] [0-9]\.[0-9]$/,"4.6 2.6 2.6 !")}1' file
そのような実装を使用する場合awk
。