将包含用单引号括起来并用逗号分隔的单词的行转换为列

Emi*_*aga 3 sed awk text-processing tr

我有这个文件:
'dog', 'cat', 'horse', 'turtle'

我想将该行转换为:

dog
cat
horse
turtle
Run Code Online (Sandbox Code Playgroud)

如果我只使用逗号作为分隔符和命令 tr 我可以这样做:
tr -s ',' '\n' < file

与输出

'dog'
 'cat'
 'horse'
 'turtle'
Run Code Online (Sandbox Code Playgroud)

但是当我用作', '分隔符时,这不起作用:

tr -s '\', \'' '\n' < file

即使我使用双反斜杠来转义单引号,它仍然不起作用。我在终端中得到的唯一输出是>.

如何正确转义单引号以获得所需的输出?

Kus*_*nda 5

将输入视为带引号的 CSV,在每个逗号分隔符后添加可跳过的空格,并使用单引号而不是标准双引号作为引用字符,我们可以用来csvformat重新格式化数据:

$ csvformat -S -q "'" -D $'\n' file
dog
cat
horse
turtle
Run Code Online (Sandbox Code Playgroud)

这使用csvformatwith-S跳过每个分隔符后的初始空白字符,-q "'"将输入引用字符设置为单引号,然后将-D $'\n'输出字段分隔符设置为换行符。

然后该文件将被重新格式化。

任何使用嵌入换行符的字段都将在输出中被引用,就像包含嵌入双引号的字段一样。