在bash中与正则表达式匹配之前删除所有

时间:2019-08-07 20:18:45

标签: regex bash

我需要删除字符串第一个数字之前的所有文本。

我尝试过

from pynput import mouse
import turtle as tt
import time

tt.speed(0)

class MyException(Exception): pass

def on_move(x,y):
    print('Pointer: {0}'.format((x,y)))
    pos = (x,y)
    tt.setpos(pos)

def on_click(x, y, button, pressed):
    if button == mouse.Button.left:
        raise MyException(button)

with mouse.Listener(
        on_click=on_click,
        on_move=on_move) as listener:
    try:
        listener.join()
    except MyException as e:
        print('{0} was clicked'.format(e.args[0]))

但不起作用

示例:输入。

sed -n 's/test/&\n/;s/.*\n//p'

输出:

aaaaassddddd 13 1saf

1 个答案:

答案 0 :(得分:0)

正则表达式1-替换为组

尝试以下正则表达式:sed 's/^[^0-9]*\(.*\)/\1/'

$ echo "aaaaassddddd 13 1saf" | sed 's/^[^0-9]*\(.*\)/\1/'
> 13 1saf

说明

  • ^[^0-9]*#从行首开始的任何字符数 除外。 “任何计数”也表示0。即:echo "13 1saf" | sed 's/^[^0-9]*\(.*\)/\1/'将返回13 1saf
  • \(.*\)#分组在正则表达式组1中的字符串的其余部分
  • / \ 1 /'#用正则表达式组1替换找到的字符串

Regex 2-只是将初始的非数字序列替换为空字符串。

感谢@Barmar的评论。您可以将初始非数字序列替换为空字符串:sed 's/^[0-9]*//'

$ echo "aaaaassddddd 13 1saf" | sed 's/^[0-9]*//'
> 13 1saf