给定一个文件,例如:
potato: 1234
apple: 5678
potato: 5432
grape: 4567
banana: 5432
sushi: 56789
Run Code Online (Sandbox Code Playgroud)
我想grep所有开头的行,potato:但只管道后面的数字potato:.所以在上面的例子中,输出将是:
1234
5432
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
rid*_*rid 99
grep 'potato:' file.txt | sed 's/^.*: //'
Run Code Online (Sandbox Code Playgroud)
要么
grep 'potato:' file.txt | cut -d\ -f2
Run Code Online (Sandbox Code Playgroud)
要么
grep 'potato:' file.txt | awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)
要么
grep 'potato:' file.txt | perl -e 'for(<>){s/^.*: //;print}'
Run Code Online (Sandbox Code Playgroud)
要么
awk '{if(/potato:/) print $2}' < file.txt
Run Code Online (Sandbox Code Playgroud)
要么
perl -e 'for(<>){/potato:/ && s/^.*: // && print}' < file.txt
Run Code Online (Sandbox Code Playgroud)
moh*_*6up 57
或者使用正则表达式断言: grep -oP '(?<=potato: ).*' file.txt
sed -n 's/^potato:[[:space:]]*//p' file.txt
Run Code Online (Sandbox Code Playgroud)
人们可以将Grep视为限制性Sed,或将Sed视为广义Grep.在这种情况下,Sed是一个很好的轻量级工具,可以满足您的需求 - 当然,还有其他一些合理的方法可以实现.
grep -Po 'potato:\s\K.*' file
Run Code Online (Sandbox Code Playgroud)
-P 使用 Perl 正则表达式
-o 只输出匹配
\s 匹配后的空间 potato:
\K 省略比赛
.* 匹配其余的字符串
| 归档时间: |
|
| 查看次数: |
98761 次 |
| 最近记录: |