如何在 grep 中为每个匹配项的输出添加一些文本前缀?



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

apples
banananas
oranges

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

我无法弄清楚的是,我希望输出包含原始行,例如:

bananas,an
oranges,an

如何在 grep 的输出中添加前缀以包含通过管道输送到它的值?

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

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

这将在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

最新更新