在逗号之前删除行中的所有内容

时间:2017-09-28 23:55:42

标签: sed

我有多个文件,如:

foo, 123456
bar, 654321
baz, 098765

我想在逗号之前(包括)删除每行上的所有内容。 输出将是:

123456
654321
098765

我在另一个问题上看到类似内容之后尝试使用以下内容,但是用户没有留下解释,所以我不确定如何处理通配符:

find . -name "*.csv" -type f | xargs sed -i -e '/*,/d'

感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:3)

方法1: 如果它始终是您想要的 2nd 列,则可以使用 awk 执行此操作 - 此命令实际上是拆分空白行而不是逗号,所以它得到你的第二列 - 数字,但没有前导空格:

awk '{print $2}' < whatever.csv

方法2: 或者在逗号之后获取所有(包括空格):

sed -e 's/^.*,//g' < whatever.csv

方法3: 如果您想查找所有 .csv 文件并将所有这些文件的输出结合在一起,您可以执行以下操作:

sed -e 's/^.*,//g' `find . -name '*.csv' -print`

方法4: 或者以与开始相同的方式 - 使用查找 xargs

find . -name '*.csv' -type f -print | xargs sed -e 's/^.*,//'

方法5: 将所有 .csv 文件制作成。 txt 文件,按上述方式处理,您可以制作简短的shell脚本。像这样:

创建一个脚本&#34; bla.sh &#34;:

#!/bin/sh
for infile in `find . -name '*.csv' -print` ; do
        outfile=`echo $infile | sed -e 's/.csv/.txt/'`
        echo "$infile --> $outfile"

        sed -e 's/^.*,//g' < $infile > $outfile
done

输入以下命令使其可执行:

chmod 755 bla.sh

然后运行它:

./bla.sh

这将创建一个 .txt 输出文件,其中包含每个 .csv 输入文件的逗号后的所有内容。

替代方法5: 或者,如果您需要将它们命名为 .csv ,则可以像这样更新脚本 - 这只会生成名为&#34的输出文件; file-new.csv &#34;对于名为&#34; file.csv &#34;:

的每个输入文件
#!/bin/sh
for infile in `find . -name '*.csv' -print` ; do
    outfile=`echo $infile | sed -e 's/.csv/-new.csv/'`
    echo "$infile --> $outfile"

    sed -e 's/^.*,//g' < $infile > $outfile
done

答案 1 :(得分:1)

这样的东西应该适用于单个文件。让我们说吧 输入是'yourfile',你希望输出转到'outfile'。

sed 's/^.*,//' < yourfile > outfile

执行搜索和替换的语法是s/input_pattern/replacement/

^将输入模式锚定到行的开头。

.匹配任何单个字符; .*匹配任何字符的零或多个字符串。

,与逗号匹配。

替换模式为空,因此与input_pattern匹配 将被删除。