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

时间:2015-09-09 16:53:05

标签: regex bash awk grep

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

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

,输出为:

AA1AA 0,00
BE661N 0,02

我已经尝试了几个与-o-v切换相结合的正则表达式但是失败了。与往常一样,Awk解决方案也值得赞赏。

3 个答案:

答案 0 :(得分:4)

您可以使用awk:

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

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

答案 1 :(得分:2)

通过sed。

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

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

答案 2 :(得分:1)

<强> GREP

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

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

你得到:

AA1AA   0,00
BE661N  0,02

<强> BASH

此外,我使用纯bashparameter expansion

添加了一个解决方案
while read line; do 
  echo "${line/%\ */} ${line##* }";
done < file