使用Sed删除第10个字符和第10个字符之后的第一个句点之间的字符

use*_*223 2 regex bash sed

我想删除每行的第10个字符和后面的第一个字符之间的所有字符.

说我的输入看起来像

0123456789 foo. foo....
1234566789 bar. bar...
0912309299 foobar. foobar..
Run Code Online (Sandbox Code Playgroud)

输出将是类似的

0123456789. foo....
1234566789. bar...
0912309299. foobar..
Run Code Online (Sandbox Code Playgroud)

是否有sed命令执行此操作?

谢谢

fed*_*qui 7

这是一种方法:

$ sed -r 's/^([0-9]{10})[^.]*/\1/' file
0123456789. foo....
1234566789. bar...
0912309299. foobar..
Run Code Online (Sandbox Code Playgroud)

或者(一般情况下,获得10个第一个字符,无论它们是否为数字):

sed -r 's/^(.{10})[^.]*/\1/'
Run Code Online (Sandbox Code Playgroud)

说明

  • -r 允许扩展正则表达式.
  • sed 's/find/replace/'是基本的替代:findreplace一次替换.在这种情况下,我们使用以下内容:
  • ^([0-9]{10})[^.]*抓住前10位数.此外,捕获所有字符到一个点..
  • \1 打印回第一个块.

这是替换的模式:

0123456789 foo. foo....
1234566789 bar. bar...
0912309299 foobar. foobar..
^^^^^^^^^^       ^^^^^^^^^^
     |    ^^^^^^^     |
     |         |      |
^([0-9]{10})  [^.]*   |
      |               |
      |          |----
^^^^^^^^^^-------------
0123456789. foo....
1234566789. bar...
0912309299. foobar..
Run Code Online (Sandbox Code Playgroud)