【问题标题】:How to remove first character from first line using sed如何使用 sed 从第一行删除第一个字符
【发布时间】:2012-12-18 23:37:36
【问题描述】:

我有三个 .csv 文件,它们是在 MS SQLServer 中保存查询时输出的。我需要将这些文件加载​​到 Informix 数据库中,这需要添加尾随分隔符。使用 sed 很容易做到这一点

s/$/,/g

但是,每个文件在第一行的第一个字符位置也包含(由 vim 显示,但不是 ed 或 sed)。

我需要摆脱这个角色。它使用 vim 的 x 命令删除一个字符。如何使用 sed 来描述这个字符,这样我就可以在不删除行的情况下删除它。

我尝试过1s/^.//g,但这不起作用。

【问题讨论】:

    标签: sql-server-2008 csv sed


    【解决方案1】:

    试试这个:

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

    或者,如果您想就地编辑文件:

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

    (已编辑)显然s/^.// 没有引用这样做,更新了。

    【讨论】:

    • ^\. 只会匹配行首的文字 .g 标志是多余的,重定向也是如此,最重要的是这将在所有匹配的行上执行替换而不是只是第一行。
    • @sudo_O 修复了它 =) 不知道为什么我把它放在首位。
    【解决方案2】:

    就地删除第一行的第一个字符:

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

    【讨论】:

    • 这仍然让我感到困惑。 -e "" 和 -e '' 之间有什么区别(如果有的话),因为你的工作。
    • 这里的引用没有任何区别,所以我不确定你做了什么,引用对于 shell 很重要,比如变量扩展和通配符。
    【解决方案3】:

    尝试:

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

    这应该从第一行删除第一个字符。 (先尝试不带-i 参数以确保)

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

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

    【讨论】:

    • 谢谢,但这是我想要的第一行。该字节对齐数据只是第一行/第一个字符。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 2011-05-16
    相关资源
    最近更新 更多