如何使用 linux 命令替换 tsv 文件中的特定符号 [如 ' 、 ^ 、 \t' 等]?

How to replace specific Symbols [like ' , ^ , \t' , etc..,] in a tsv file using linux commands?

我正在尝试替换 tsv 文件中的某些符号组合,如下所示,

出现的 ^' 应替换为 Nothing /t' 的出现应替换为 /t 出现的 ' 应替换为 Nothing

最后, 我应该将任何单元格中的开始和结束 " 替换为空,而出现在任何单元格值中间的 " 应该保持不变。 [例如:"Apple iphone" 应更换为 Apple iphone 和 7" Samsung LED TV 应保持不变]

示例文件:

7寸电视"Apple Iphone"\t'印度\t'^'全部退出'PAPS'

如果您将上面的行复制到 excel 中,它将进入不同的列。

我试过的代码:

sed "s/\^'//g" ${file}.txt > ${file}_new.txt
sed "s//t'//t/g" ${file}_new.txt > ${file}_new_1.txt

请朋友帮我解决这个问题

提前致谢。

虽然我还没有完全理解你的问题,你可能想要:

  • 使用 sed 指定多个过滤器
  • 确保特殊字符(例如 / 通常用于分隔搜索模式和替换模式)被正确转义。

例如以下应该可以解决问题:

sed -e "s|/t'|/t|g" \
    -e "s|[^]'||g" \
    -e "s|'||g" \
    -e 's|"\t"|\t|g' -e 's|^"||' -e 's|"$||' \
    "${file}.txt" > "${file}_fixed.txt"

这是使用竖线字符 | 而不是 / 来构造 search/replace 命令。它还直接使用 4 种不同的替换模式。 顺序很重要:我们从要替换的最大块开始,然后逐渐缩小它们(因此我们在替换 ' 之前替换 ^')。 最后一行是摆脱双引号的简单方法(首先删除列之间的双引号-制表符-双引号;然后删除任何前导或尾随双引号)