繁体   English   中英

Grep并仅打印字符串的开头和结尾

[英]Grep and print only beginning and end of a string

我有一个字符串列表,它们是产品代码,后跟产品描述和价格。 我想Grep并只打印产品代码和价格。 产品代码是大写字母和数字的组合,价格是数字,逗号是小数点。 代码,描述和价格用空格分隔,如:

AA1AA This is an example for free 0,00
BE661N For your 0,02

输出将是:

AA1AA 0,00
BE661N 0,02

我已经尝试了几个与-o-v开关组合的regexp但是失败了。 一如既往, Awk解决方案也很受欢迎。

你可以使用awk:

awk '{print $1, $NF}' file
AA1AA 0,00
BE661N 0,02

$1是第一个字段, $NF是每个记录中的最后一个字段。

通过sed。

sed 's/[[:blank:]].*[[:blank:]]/ /' file

[[:blank:]].*[[:blank:]]将匹配从第一个空格到最后一个空格的所有字符。 用空格替换所有匹配的字符将为您提供所需的输出。

GREP

我使用grep添加一个解决方案(注意:最好使用awksed ,这只是出于好奇)

grep -E -o "^\S+\b" file | paste - <(grep -E -o "\b\S+$" file)

你得到:

AA1AA   0,00
BE661N  0,02

BASH

此外,我添加了一个使用纯bash参数扩展的解决方案

while read line; do 
  echo "${line/%\ */} ${line##* }";
done < file

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM