1

複数の行を含むテキスト ファイルがあり、次のような形式の行を置き換えようとしています。

cat: -0600, dog: +0900
cat: -1000, snake: -0500
cat: -0900
cat: +0100

言う

cat: -6, dog: +0900
cat: -10, snake: -0500
cat: -9
cat: +1

他にも次の行があります。

dog: -0700
dog: +1000

触れてはいけないこと。調べたのですが、よくわかりません。より良い方法がない限り、sed を使用することをお勧めします。

4

3 に答える 3

0

私は awk でそれを行いますが、それがより良い方法だと思うかどうかはわかりません:

awk '/^cat: /{$2/=100}7' file

あなたの入力でテストしてください:

kent$  echo "cat: -0600
cat: -1000
cat: -0900
cat: +0100
dog: -0700
dog: +1000"|awk '/^cat: /{$2/=100}7'
cat: -6
cat: -10
cat: -9
cat: 1
dog: -0700
dog: +1000

正の数の前にプラス " " を付けたい場合+:

awk '/^cat: /{$2/=100;$2=$2>0?"+"$2:$2}7' file

同じ入力:

kent$  echo "cat: -0600
cat: -1000
cat: -0900
cat: +0100
dog: -0700
dog: +1000"|awk '/^cat: /{$2/=100;$2=$2>0?"+"$2:$2}7'
cat: -6
cat: -10
cat: -9
cat: +1
dog: -0700
dog: +1000
于 2013-08-19T22:56:42.077 に答える
0

複合データ ファイルを指定すると、このスクリプトは以下のサンプル出力を提供します。

sed 's/^\(cat: [-+]\)0\{0,1\}\([1-9]\{0,1\}[0-9]\)00/\1\2/' data

for の後にorcat:が続き、次にオプションの 0 (これはキャプチャされません)、オプションの後に 2 つの 's が続き、それを 2 つの記憶された部分に置き換えます。に変換されます。最後の 2 桁が必ずしも一致しない場合は、最初の正規表現をまたはに変更します。+-[1-9][0-9]0+0000+000[0-5][0-9][0-9][0-9]

出力例:

cat: -6, dog: +0900
cat: -10, snake: -0500
cat: -9
cat: +1
dog: -0700
dog: +1000
于 2013-08-19T23:26:46.473 に答える