考虑这个数据文件
随机文本“txt”随机文本
随机文本“txt1”随机文本“txt2”
随机文本“txt1”随机文本“txt3”
随机文本“txt1”随机文本“txt4”
随机文本“txt1”随机文本“txt5”
随机文本“txt1”随机文本“txt5”随机文本“txt6”随机文本
对于每一行,我需要提取引号中的所有内容,即。
文本
txt1,txt2型
txt1,txt3型
txt1,txt4型
txt1,txt5型
txt1、txt5、txt6
一行中可以有多个引号。
我在shell中编写了这个regex(实际上我编写了一个sed命令,但是当我将它粘贴到这里时,它会搞砸。*)
^dotStar“[^”]+”dotStar$(用于单数字引号)
^dotStar“[^”]+“dotStar”[^”]+“dotStar$(如果有两个引号)
如您所见,我的regex依赖于出现的引号的数量。有谁能给我一个通用的reg ex,不管引号出现的次数,它都会给我一个文本。

最佳答案

您可以使用这个sed命令:

sed --posix 's/[^"]*"\([^"]*\)"[^"]*/\1,/g;s/\(.*\),/\1/' input.txt

输出:
txt
txt1,txt2
txt1,txt3
txt1,txt4
txt1,txt5
txt1,txt5,txt6

10-02 14:42