我正在尝试编写正则表达式来提前查找用户名:并匹配后面的单词直到行尾:
正则表达式是:
^(?=User name:)\s*\[A-Za-z]+
文本内容如下:
Action: NEW
User name: Matthew Thomas
Job title: Dealer Account Manager
Direct report: Craig Carlson
Department: Dealer Account Management
Location: Milton, QLD
Employment type: Permanent Full Time
Start date: 15/07/2013
Finish date:
__________________________________________
Decision Point 3
--------------
Read Only
答案1
^(?=User name:)\s*\[A-Za-z]+
(?=User name:)
您需要的是后视,而不是前视:
(?<=User name:)
^(?=User name:)
- 后向查找将在开头进行搜索,无论您将其放在表达式中的什么位置,因此它会查找“用户名:”,后面跟着行首和一些空格。还包括行首:
(?<=^User name:)
- 将您的名字放在括号中,以便更容易捕获:
([A-Za-z]+)
[A-Za-z]
您的名字中也可以有空格,甚至一些带重音的字母,我会像这样修改它:(
(\S.+)
一个无空格字符(后面是空格)后跟所有内容直到行尾)
整个表达式为:
(?<=^User name:)\s*(\S.+)$
您可以测试这里。
答案2
目前还不清楚你想要什么。
我将您的示例文本放入 text.txt 文件中。
如果你只是想 grep 该行,那么有以下解决方案:
grep -E "^User name:\s*[A-Za-z ]+$" text.txt
User name: Matthew Thomas
如果只想要名称,我们可以使用 sed 增强命令:
grep -E "^User name:\s*[A-Za-z ]+$" text.txt | sed -e '1,$s/^User name:\s*\([A-Za-z ]*\)$/\1/'