用替换的引号查找替换为sed

时间:2018-10-16 09:00:02

标签: sed replace double-quotes

Converting Height Measurements from Imperial to Metric units相关,但使用的方法不同。

我有一个数据集,其中有许多混合单位的值,尤其是以英制和公制单位测量高度。此外,无论出于何种原因,上述英制尺寸都包含过多的引号。

我曾认为,因为人们的身高相对受到限制,所以大规模的替换工作可能会起作用,而不是进行转换。例如,身高5英尺3英寸的人是160.02厘米,因此可以找到所有一个并将其替换为另一个。

考虑数据集test.csv中的这一行

"Female","Hispanic",25,"5' 11"""

我想用“ 180.34”替换“ 5'11””“。

我已经尝试过sed -i 's#"5' 1"""#"180.34"#g' test.csv,但是唯一的输出结果是终端窗口中的>字符,这表明我做错了什么,但还不太清楚。我缺少处理多余引号的东西吗?

4 个答案:

答案 0 :(得分:2)

问题是sed表达式5' 1中的单引号。

使用\x27替换单引号:

sed -i 's#"5\x27 1"""#"180.34"#g' test.csv

答案 1 :(得分:2)

wrt Additionally, for whatever reason, said Imperial measurements contain an excess of quotation marks.-当您以英尺和英寸为单位书写尺寸时,'代表英尺,"代表英寸。因此,将5英尺11英寸写为5' 11"。在引用了"foo"之类的字段的CSV中,您需要某种方式来包含",而在某些CSV格式(例如从Excel导出的格式)中,一种实现方式是将{{1 }。因此,在引用字段中包含"就是foo"bar。现在让我们回到"foo""bar"-应用相同的逻辑,并将其包含在带引号的字段中,您可以将其写为5' 11",其中最后一个"5' 11"""之前的"""的转义表示形式,以包含在引用字段中。有关适用的CSV“标准”的参考以及有关使用标准UNIX工具awk解析CSV的更多信息,请参见What's the most robust way to efficiently parse CSV using awk?

写了您的特定问题-而不是一次使用硬编码的值一次转换一个数字,而只是一次将它们全部通过算法转换。将GNU awk用于FPAT:

"

答案 2 :(得分:1)

在这种情况下,最简单的方法是您的sed字符串并转义您的

sed -i "s|\"5' 1\"\"\"|\"180.34\"|g" test.csv

答案 3 :(得分:1)

另一种方式:

sed -i 's/5'"'"' 11""/180.34/g' test.csv
相关问题