我有像
这样的行输入:
abcd1234
bdfghks4506
agfdch6985
我想添加“。”在第一个整数之前,我该怎么做?
输出
abcd.1234
bdfghks.4506
agfdch.6985
答案 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替换为正则表达式捕获组。
答案 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
。