Sed 如何截断数字的第一个数字?

Sed 如何截断数字的第一个数字?,sed,grep,Sed,Grep,例如,我的文件包含以下数据: $ cat sample.txt 19999119999,string1,dddddd 18888135790,string2,dddddd 15555555500,string3,dddddd 这是一个示例数据。如何从每行中只删除第一个数字?我的输出应该是: $ cat output.txt 9999119999,string1,dddddd 8888135790,string2,dddddd 5555555500,string3,dddddd 是否有任何

例如,我的文件包含以下数据:

$ cat sample.txt 

19999119999,string1,dddddd
18888135790,string2,dddddd
15555555500,string3,dddddd
这是一个示例数据。如何从每行中只删除第一个数字?我的输出应该是:

$ cat output.txt
9999119999,string1,dddddd
8888135790,string2,dddddd
5555555500,string3,dddddd
是否有任何方法可以使用grep或sed按字符顺序解析每一行? 或者以任何其他方式获得所需的输出?

尝试以下方法:

$ sed -r 's/^[0-9](.*)/\1/' sample.txt
输出:

9999119999,string1,dddddd
8888135790,string2,dddddd
5555555500,string3,dddddd
  • ^[0-9]每行的第一位数字
  • (.*)-除第一位数字外的每行内容
  • \1-表示(.*)
对不起,我的英语不好。

试试这个:

$ sed -r 's/^[0-9](.*)/\1/' sample.txt
输出:

9999119999,string1,dddddd
8888135790,string2,dddddd
5555555500,string3,dddddd
  • ^[0-9]每行的第一位数字
  • (.*)-除第一位数字外的每行内容
  • \1-表示(.*)

对不起,我的英语不好。

格雷普可以回头看看解决这个问题。为此,您需要
-P
选项:

grep -Po '(?<=^\d)(.+)' file   

(?Grep可以通过向后查看解决此问题。为此,您需要
-p
选项:

grep -Po '(?<=^\d)(.+)' file   

(?您只需从第二个字符开始打印:

$ cut -c2- file
9999119999,string1,dddddd
8888135790,string2,dddddd
5555555500,string3,dddddd
或者,使用
sed
,删除第一个字符:

$ sed 's/^.//' file
9999119999,string1,dddddd
8888135790,string2,dddddd
5555555500,string3,dddddd

您只需从第二个字符开始打印:

$ cut -c2- file
9999119999,string1,dddddd
8888135790,string2,dddddd
5555555500,string3,dddddd
或者,使用
sed
,删除第一个字符:

$ sed 's/^.//' file
9999119999,string1,dddddd
8888135790,string2,dddddd
5555555500,string3,dddddd

这里有一个简单的sed字符串:sed's/^[0-9]/',所以这是一个删除行中第一个字符的问题,对吗?如果第一个字段中的数字是一位数字,会发生什么情况?该数字是否仍然被删除,不留下任何数字?如果不是(因此您只想截断多位数的第一位数字),那么您需要比
sed的/^[0-9]/'
复杂一点-您需要
sed的/^[0-9]\([0-9]\)/\1/'
(在行首查找两位数字,只替换第二位)。如果您确信第一个字段中永远不会有一个位数,可以使用原始的simpler脚本-使用正则表达式通常是健壮性和简单性之间的平衡。下面是一个简单的sed字符串:sed的/^[0-9]//'因此,这是一个删除行中第一个字符的问题,对吗?如果第一个字段中的数字是一位数字,该怎么办?该数字是否仍然被删除,而不留下任何数字?如果不是(因此您只想截断一个多位数字的第一位数字),那么您需要比
sed的s/^[0-9]稍微复杂一点//“
-您需要使用
sed的/^[0-9]\([0-9]\)/\1/”
(在行首查找两位数字,只替换第二位)。如果您确信在第一个字段中永远不会有一个位数,您可以使用原始的simpler脚本-使用正则表达式通常是稳健性和简单性之间的平衡。它是否会从数据中删除所有出现的1?您能解释一下您的脚本吗?simpler:
sed的/^[0-9]//'sample.txt
。或者,如果入侵者似乎说的第一个数字总是
1
sed's/^1/'sample.txt
@入侵者-我已经更新了我的答案,很抱歉我的英语不好。它会从数据中删除所有出现的1吗?你能解释一下你的脚本吗?更简单:
sed's/^[0-9]//'sample.txt
。或者,如果入侵者似乎说的第一个数字总是
1
sed的/^1/'sample.txt
@入侵者-我已经更新了我的答案,很抱歉我的英语不好。