什么是 ^I 字符以及如何使用 sed 找到它?

什么是 ^I 字符以及如何使用 sed 找到它?

我通常将数据从 csv 文件导入 MySQL,但我的数据提供程序将 NULL 条目保留为“”,因此我需要将“”替换为“\N”。使用类似以下脚本,这很容易

for csvfile in *.csv
do
    sed -i -e 's/^,/\\N,/' -e 's/,$/,\\N/' -e 's/,,/,\\N,/g' -e 's/,,/,\\N,/g' $csvfile
done

但是,我有一个带逗号的 csv 文件,因此导入失败。我以“制表符分隔”格式获取文件,然后尝试

for txtfile in *.txt
do
    sed -i -e 's/^\\t/\\N\\t/' -e 's/\\t$/\\t\\N/' -e 's/\\t\\t/\\t\\N\\t/g' -e 's/\\t\\t/\\t\\N\\t/g' $txtfile
done

但它仍然失败(据我所知,脚本没有添加任何“\N”)。当我在 Vim 中打开制表符分隔的文件并键入时,:set list看起来制表符被存储为“^I”。我尝试用“\^I”替换“\t”,但没有添加我需要的“\N”NULL 字符。

有什么想法吗?谢谢!

答案1

您已经知道 ^I 是什么,但第二个sed命令失败的原因之一是您使用了错误的顺序来匹配制表符。匹配制表符的顺序是\t,而不是\\t\\t匹配 a\后跟 a t

答案2

^ 通常是 Ctrl 的简写,而 Ctrl-I 与 Tab 相同

相关内容