文件就像这样
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或其他)?
非常感谢!
答案 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)
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;
之前