如何使用sed从第一行中删除第一个字符

7
我有三个csv文件,这些文件是在MS SQLServer中保存查询后的输出结果。我需要将这些文件加载到Informix数据库中,但要求附加一个尾随分隔符。使用sed很容易实现:s/$/,/g
然而,每个文件的第一行第一字符位置都包含一个“^@”字符(通过vim显示,但不包含在ed或sed中)。我需要删除此字符。它使用vim的x命令可作为一个字符删除。请问如何在sed中描述此字符以便删除它而不会删除整个行?
我已经尝试使用1s/^.//g,但没有起作用。
3个回答

10

试试这个:

sed -e '1s/^.//' input_file > output_file

或者,如果你想直接在原文件上进行编辑:

sed -ie '1s/^.//' input_file

(已编辑)显然s/^.//并不能做到这一点,已更新。


^\. 只会匹配行首的一个字面上的 .g 标志是多余的,重定向也是多余的,最重要的是,这将对所有匹配的行执行替换,而不仅仅是第一行。 - Chris Seymour
@sudo_O 已经修复了 =) 不确定为什么我一开始要放进去。 - sampson-chen

2

在原地删除第一行的第一个字符:

sed -i  '1s/^.//' file

这仍然让我感到困惑。如果有的话,-e“<sed-commands>”和-e'<sed-commands>'之间有什么区别,因为你的代码可以运行。 - octopusgrabbus
在这里引用不会有任何影响,所以我不确定你做了什么,但是对于像变量扩展和通配符匹配这样的事情,引用对于 shell 来说非常重要。 - Chris Seymour

2

尝试:

sed -i '1s/^.\(.*\)/\1/' file

这应该从第一行中删除第一个字符。 (首先尝试不使用-i参数,以确保正确)

编辑:我最初发布了以下内容,这将从每行中删除第一个字符。 重新阅读问题后,我意识到这并不是想要的。

sed -i 's/^.\(.*\)/\1/' file

谢谢,但我只需要第一行。字节对齐数据只是第一行/第一个字符。 - octopusgrabbus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接