Bash 如何在grep中的每个匹配的输出前加上一些文本?

Bash 如何在grep中的每个匹配的输出前加上一些文本?,bash,unix,grep,Bash,Unix,Grep,我有一个包含短语列表的文件 apples banananas oranges 我正在运行cat file.txt | xargs-I%sh-c“grep-Eio'(an)>>output.txt” 我不明白的是,我希望输出包含原始行,例如: bananas,an oranges,an 如何在grep的输出前加上前缀,使其也包含通过管道传输到grep的值?这应该是awk的任务,请尝试以下操作 awk '/an/{print $0",an"}' Input_file 这将在输入文件的所有行中

我有一个包含短语列表的文件

apples
banananas
oranges
我正在运行
cat file.txt | xargs-I%sh-c“grep-Eio'(an)>>output.txt”

我不明白的是,我希望输出包含原始行,例如:

bananas,an
oranges,an

如何在grep的输出前加上前缀,使其也包含通过管道传输到grep的值?

这应该是awk的任务,请尝试以下操作

awk '/an/{print $0",an"}'  Input_file

这将在输入文件的所有行中查找字符串
an
,并在其中附加
an

使用
sed的解决方案

sed '/an/s/$/,an/' intput_file

这将查找与模式
/an/
匹配的行,并在模式空间
$
的末尾追加
,an
,使用awk而不是
grep

$ awk -v s="an" '                          # search string
BEGIN {
    OFS=","                                # separating comma
}
match($0,s) {                              # when there is a match
    print $0,substr($0,RSTART,RLENGTH)     # output
}' file
输出:

banananas,an
oranges,an

你能告诉我我的回答是否对你有帮助吗。