3

我有一个文件,其内容类似于以下内容:

ptrn: 435324kjlkj34523453
Note1: rtewqtiojdfgkasdktewitogaidfks
Note2: t4rwe3tewrkterqwotkjrekqtrtlltre

我试图在以 "ptrn:" 开头的行的空格后获取字符。我正在尝试以下命令;

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

我在新文件中得到结果:

ptrn: 435324kjlkj34523453

但我只想将空格后面的字符,即“ 435324kjlkj34523453 ”写入新文件中,开头没有“ ptrn: ”。

所以结果应该是这样的:

435324kjlkj34523453

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

4

2 回答 2

3

您可以使用

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

请参阅在线演示。所有输出435324kjlkj34523453

grepPCRE 正则表达式(启用-P选项)中,模式匹配

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

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

sed中,命令意味着

  • -n- 禁止默认行输出
  • s- 使用替换命令
  • ^ptrn:[[:space:]]*\(.*\)- 字符串开头,ptrn:,零个或多个空格,其余的行被捕获到第 1 组
  • \1- 用组 1 值替换匹配项
  • p- 打印替换的结果。
于 2021-03-07T20:18:59.310 回答
0

你可以使用这个sed

sed -nE 's/^ptrn: (.*)/\1/p' file > output_file.txt
于 2021-03-07T20:20:24.060 回答