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 &"
文件是这样的
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 &"