我有一个文件,其中包含大量文本和一些数字,这些数字描述了精度为三位数的< 1的数字。我想将这些数字替换为大致相等的整数百分比(数字0-99)。
0.734 -> 73
0.063 -> 6
0.979 -> 97
字符串
这将是伟大的轮适当,但不是必需的。
我试过以下几种和几种变体,我似乎不能得到甚至一个匹配:
sed -e 's/0\.(\d\d)/&/' myfile.txt
型
我的理解是,匹配数字0,然后是小数,捕获接下来的两位数字,并让sed用捕获的部分替换整个匹配。
即使我得到了这个工作,我不知道如何处理0.063 -> 6
的情况下。当然会感激这方面的帮助。
3条答案
按热度按时间disho6za1#
sed
确实支持字符类,但使用了较长的POSIX名称。数字是[[:digit:]]
。只写[0-9]
会更短。试试这个:
字符串
-E
标志告诉它使用现代正则表达式。这里实际上有两个命令,由;
分隔:s/0\.([0-9][0-9]).*/\1/
:将0
后面的两个数字和一个点放入一个捕获组,并将整个字符串替换为该捕获组。s/^0//
:从上面的字符串中删除前导零。fslejnso2#
除了Zoff给出的
sed
答案外,你还可以使用awk来更好地实现(使用awk):字符串
bash only实现:
型
hrirmatl3#
这可能对你有用(GNU sed):
字符串
这使用交替和反向引用(BR)来匹配所需的模式。如果第一个模式匹配,第二个BR将返回该值,第三个BR将为空。同样,如果交替中的第二个模式匹配,第二个BR将为空,第三个BR将返回所需的值。