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

两个表达式应该可以做到这一点:

sed 's|^cat: -0600|cat: -6|; s|^dog: -0700|dog: -7|;' file

于 2013-08-19T22:48:02.690 回答
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

它查找cat:后跟一个+or -,然后是一个可选的 0 (未捕获),然后是一个可选的[1-9]后跟[0-9]两个0',并将其替换为两个记住的部分。它将转换+0000+0. 如果最后两位数字不总是00,请修改第一个正则表达式以匹配[0-5][0-9]or [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 回答