shell脚本从变量中删除

时间:2015-06-22 18:54:48

标签: bash shell shellcode

文件就像这样

aaa&123
bbb&234
ccc&345
aaa&456
aaa$567
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
aaa$567: No such file or directory

如何解决?以及如何从存在的变量中剪切(或grep或其他)?

非常感谢!

2 个答案:

答案 0 :(得分:1)

使用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)

答案 1 :(得分:0)

赛勒斯有我的投票。如果没有GNU grep,那么awk替代方案:

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

使用&作为字段分隔符,对于包含2个字段的行(即&必须存在)并且第一个字段包含&#34; aaa&#34;,请打印第2个字段。< / p>

您的答案的错误是您正在将grep输出视为cut命令中的文件名。你想要的是这个:

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

模式表示&#34; aaa出现在&amp;&#34;

之前