正则表达式,select以我的条件开头的行,但只取space之后的字符

Regex, select the line that starts with my condition, but take only the characters after space

我有一个包含以下内容的文件:

ptrn: 435324kjlkj34523453
Note1: rtewqtiojdfgkasdktewitogaidfks
Note2: t4rwe3tewrkterqwotkjrekqtrtlltre

我试图在以“ptrn:”开头的行的 space 之后获取字符。我正在尝试下面的命令 ;

>>> cat daily.txt | grep '^p.*$' > dailynew.txt

我在新文件中得到结果:

ptrn: 435324kjlkj34523453

但我只想将 space 之后的字符“435324kjlkj34523453”写入新文件,而无需“ptrn:"开头。

所以结果应该是这样的:

435324kjlkj34523453

如何使用高效的正则表达式代码建立这个目标?

你可以使用

grep -oP '^ptrn:\s*\K.*' daily.txt > dailynew.txt
awk '/^ptrn:/{print }' daily.txt > dailynew.txt
sed -n 's/^ptrn:[[:space:]]*\(.*\)//p' daily.txt > dailynew.txt

参见online demo。所有输出435324kjlkj34523453.

grep PCRE 正则表达式中(使用 -P 选项启用)模式匹配

  • ^ - 字符串的开头
  • ptrn: - ptrn: 子串
  • \s* - 零个或多个空格
  • \K - 清除当前匹配值的匹配重置运算符
  • .* - 该行的其余部分。

awk命令中,^ptrn:正则表达式用于查找以ptrn:开头的行,然后{print }打印第一个空格后的值,从第二个“列”(因为 awk 中的默认字段分隔符是空格)。

sed中,命令的意思是

  • -n - 抑制默认行输出
  • s - 使用替换命令
  • ^ptrn:[[:space:]]*\(.*\) - 字符串的开头,ptrn:,零个或多个空格,以及捕获到第 1 组的行的其余部分
  • </code> - 用第 1 组值 </li> 替换匹配项 <li><code>p - 打印替换结果。

你可以使用这个sed:

sed -nE 's/^ptrn: (.*)//p' file > output_file.txt