在所有行中的第一个整数之前添加点

时间:2018-04-23 04:24:57

标签: regex awk sed text-editor

我有像

这样的行

输入:

abcd1234  
bdfghks4506  
agfdch6985 

我想添加“。”在第一个整数之前,我该怎么做?

输出

abcd.1234  
bdfghks.4506  
agfdch.6985  

5 个答案:

答案 0 :(得分:2)

这可能适合你(GNU sed):

sed -i 's/[[:digit:]]/.&/' file

如果某一行中有数字,请在其前面添加.

N.B。要在文件中的每个数字前加上.,请使用:

sed -i 's/[[:digit:]]/.&/g' file

答案 1 :(得分:1)

对你的案件最严格的命令是

sed -E -i 's/([a-z])([1-9])/\1\.\2/' file.txt

-E使用扩展的正则表达式    -i ''替换文件(而不是写入输出)

这将匹配您提供的任何示例

答案 2 :(得分:1)

$ cat > input.txt
abcd1234
bdfghks4506
agfdch6985
$ sed -e 's/^\([^0-9]*\)\([0-9]\)\(.*\)$/\1.\2\3/' input.txt
abcd.1234
bdfghks.4506
agfdch.6985

将sed string替换为正则表达式捕获组。

  1. 匹配行的开头。
  2. 启动与任意数量的非数字字符匹配的捕获组。
  3. 启动与单个数字匹配的第二个捕获组。
  4. 启动与该行剩余部分匹配的第三个捕获组。
  5. 匹配行尾。
  6. 将整行替换为第一个捕获组的内容,"。",第二个捕获组,最后是第三个捕获组。

答案 3 :(得分:1)

sub的{​​{1}}函数可能会有所帮助,

awk

简要说明,

  • $ awk 'sub(/[0-9]/,".&",$0)1' file abcd.1234 bdfghks.4506 agfdch.6985 :仅替换每行中第一个匹配的子字符串
  • sub:替换为实际匹配的文本(即[0-9])
  • 附加&:打印结果。

答案 4 :(得分:0)

不熟悉awk / sed,但使用此正则表达式的正则表达式取代应该是您所需要的:

搜索:(\d+.*?)$(匹配从第一个找到的数字到行尾的所有内容)

替换为:.$1(捕获的组#1以文字.为前缀)

replace命令中捕获组的表示法可能因实现而异。我在这里使用了$1,但有些实现可能会使用\1