正则表达式,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
我有一个包含以下内容的文件:
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