如何使用 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 种不同的替换模式。
顺序很重要:我们从要替换的最大块开始,然后逐渐缩小它们(因此我们在替换 '
之前替换 ^'
)。
最后一行是摆脱双引号的简单方法(首先删除列之间的双引号-制表符-双引号;然后删除任何前导或尾随双引号)
我正在尝试替换 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 种不同的替换模式。
顺序很重要:我们从要替换的最大块开始,然后逐渐缩小它们(因此我们在替换 '
之前替换 ^'
)。
最后一行是摆脱双引号的简单方法(首先删除列之间的双引号-制表符-双引号;然后删除任何前导或尾随双引号)