我需要从文件中搜索模式并仅在屏幕上显示模式,而不是整行。如何在linux中执行此操作?

时间:2017-11-10 13:20:01

标签: linux shell scripting

我要求从文件中搜索x=<followed by any values>这样的模式并显示模式,即x=<followed by any values>,仅在屏幕上,而不是整行。我怎么能在Linux中做到这一点?

1 个答案:

答案 0 :(得分:1)

我有3个答案,从简单(但有警告)到复杂(但万无一失):

1)如果你的模式每行不会出现多次,你可以这样做(假设你的shell是

PATTERN="x="
sed "s/.*\($PATTERN\).*/\1/g" your_file | grep "$PATTERN"

2)如果你的模式每行出现多次,那就更难了。一种简单而又愚蠢的方法是使用一个特殊的字符,这些字符不会出现在任何具有您的模式的行上,例如&#34; @&#34;:

PATTERN="x="
SPECIAL="@"
grep "$PATTERN" your_file | sed "s/$PATTERN/$SPECIAL/g" \
  | sed "s/[^$SPECIAL]//g" | sed "s/$SPECIAL/$PATTERN/g"

(这不会将每行的输出模式分开,例如,如果源行有3次&#34; x =&#34;,您将看到x=x=x=,这是通过在最后一个sed中添加空格来轻松修复

3)总是有效的东西无论如何:

PATTERN="x="
awk "NF>1{for(i=1;i<NF;i++) printf FS; print \"\"}" \
  FS="$PATTERN" your_file