我有这个文件:
'dog', 'cat', 'horse', 'turtle'
我想将该行转换为:
dog
cat
horse
turtle
如果我只使用逗号作为分隔符和命令 tr 我可以这样做:
tr -s ',' '\n' < file
与输出
'dog'
'cat'
'horse'
'turtle'
但是当我', '
用作分隔符时,这不起作用:
tr -s '\', \'' '\n' < file
即使我使用双反斜杠来转义单引号,它仍然不起作用。我在终端中得到的唯一输出是>
.
如何正确转义单引号以获得所需的输出?
将输入视为带引号的 CSV,在每个逗号分隔符后使用可跳过的空格,并使用单引号而不是标准双引号作为引号字符,我们可以
csvformat
用来重新格式化数据:这使用
csvformat
with-S
跳过每个分隔符后的初始空白字符,-q "'"
将输入引号字符设置为单引号,然后-D $'\n'
将输出字段分隔符设置为换行符。然后重新格式化该文件。
任何使用嵌入换行符的字段都将在输出中被引用,包含嵌入双引号的字段也是如此。
tr
适用于集合,而不是字符串。第一组中的每个第一个符号被第二组中的第一个符号替换,第一组中的第二个符号被第二组中的第二个符号替换,等等。如果第二组的符号少于第一组 - 第一组中没有正确配对的所有符号都将替换为第二组的最后一个符号。
你需要
每个撇号、逗号和空格都替换为换行符,但 -s 选项将它们全部压缩到一个 LF 实例中。
使用 GNU
grep
或在使用 pcre 支持构建时兼容:请注意,它会跳过带引号的空字符串(如 中
'empty', 'like', ''
)。[\s,']
跳过所有空格、逗号和单引号,然后我们K
eep 以下内容:下一个非'
字符序列。使用
sed
您可以使用以下
sed
命令:另请参阅:http ://awk.freeshell.org/PrintASingleQuote 如果我们基于它的参考,我们可以这样做: