shell 从变量中剪切的脚本

shell script cut from variables

文件是这样的

aaa&123
bbb&234
ccc&345
aaa&456
aaa7
bbb&678

我要输出:(包含"aaa"和&后的文字)

123
456

我想在 shell 脚本中执行, 按照代码考虑

#!/bin/bash
raw=$(grep 'aaa' 1.txt)
var=$(cut -f2 -d"&" "$raw")
echo $var

它给我一个类似

的错误
cut: aaa&123
aaa&456
aaa7: No such file or directory

如何解决?以及如何从现有变量中剪切(或 grep 或其他)?

非常感谢!

使用 GNU grep:

grep -oP 'aaa&\K.*' file

输出:

123
456

\K: 忽略模式匹配之前的所有内容并忽略模式本身

来自 man grep:

-o, --only-matching
      Print only the matched (non-empty) parts of a matching line,
      with each such part on a separate output line.

-P, --perl-regexp
      Interpret PATTERN as a Perl compatible regular expression (PCRE)

我对赛勒斯投了赞成票。如果 GNU grep 不可用,awk 替代方案:

awk -F'&' 'NF==2 &&  ~ /aaa/ {print }' file

使用 & 作为字段分隔符,对于具有 2 个字段的行(即 & 必须存在)并且第一个字段包含 "aaa",打印第二个字段。


您的回答有误,您将 grep 输出视为 cut 命令中的文件名。你要的是这个:

grep 'aaa.*&' file | cut -d'&' -f2

模式表示"aaa appears before an &"